import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow.keras
from tensorflow.keras import backend as K
import tensorflow.keras.utils
from glob import glob
from tensorflow.keras.models import Sequential
from sklearn.model_selection import train_test_split
from tensorflow.keras.layers import Input, Lambda, Dense, Flatten, Conv2D, MaxPooling2D, Dropout, Activation, BatchNormalization
from tensorflow.keras.models import Model
from tensorflow.keras.models import load_model
from tensorflow.keras.applications.inception_v3 import InceptionV3
from keras.applications.vgg16 import VGG16
from tensorflow.keras.applications.inception_v3 import preprocess_input
from tensorflow.keras.preprocessing import image
from tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img, array_to_img, img_to_array
%matplotlib inline
K.clear_session()
from google.colab import drive
drive.mount("/content/gdrive")
Drive already mounted at /content/gdrive; to attempt to forcibly remount, call drive.mount("/content/gdrive", force_remount=True).
# Define Constants by re-sizing all the images
IMAGE_SIZE = [224, 224]
train_path = '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train'
valid_path = '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val'
def normalize(input_image, input_mask):
input_image = tf.cast(input_image, tf.float32) / 255.0
input_mask -= 1
return input_image, input_mask
# Import the InceptionV3 model and here we will be using imagenet weights
inception = InceptionV3(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)
# We don't need to train existing weights
for layer in inception.layers:
layer.trainable = False
# Folders in the Training Set
folders = glob('/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/*')
folders
['/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Spider_mites', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Septoria_leaf_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Late_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Mosaic_virus', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Leaf_Mold', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Healthy', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Bacterial_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Early_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Target_Spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Yellow_Leaf_Curl_Virus']
# Model layers -> can add more if required
x = Flatten()(inception.output)
prediction = Dense(len(folders), activation='softmax')(x)
# Create a model object
model = Model(inputs=inception.input, outputs=prediction)
# View the structure of the model
model.summary()
Model: "model_1"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_2 (InputLayer) [(None, 224, 224, 3 0 []
)]
conv2d_94 (Conv2D) (None, 111, 111, 32 864 ['input_2[0][0]']
)
batch_normalization_94 (BatchN (None, 111, 111, 32 96 ['conv2d_94[0][0]']
ormalization) )
activation_94 (Activation) (None, 111, 111, 32 0 ['batch_normalization_94[0][0]']
)
conv2d_95 (Conv2D) (None, 109, 109, 32 9216 ['activation_94[0][0]']
)
batch_normalization_95 (BatchN (None, 109, 109, 32 96 ['conv2d_95[0][0]']
ormalization) )
activation_95 (Activation) (None, 109, 109, 32 0 ['batch_normalization_95[0][0]']
)
conv2d_96 (Conv2D) (None, 109, 109, 64 18432 ['activation_95[0][0]']
)
batch_normalization_96 (BatchN (None, 109, 109, 64 192 ['conv2d_96[0][0]']
ormalization) )
activation_96 (Activation) (None, 109, 109, 64 0 ['batch_normalization_96[0][0]']
)
max_pooling2d_4 (MaxPooling2D) (None, 54, 54, 64) 0 ['activation_96[0][0]']
conv2d_97 (Conv2D) (None, 54, 54, 80) 5120 ['max_pooling2d_4[0][0]']
batch_normalization_97 (BatchN (None, 54, 54, 80) 240 ['conv2d_97[0][0]']
ormalization)
activation_97 (Activation) (None, 54, 54, 80) 0 ['batch_normalization_97[0][0]']
conv2d_98 (Conv2D) (None, 52, 52, 192) 138240 ['activation_97[0][0]']
batch_normalization_98 (BatchN (None, 52, 52, 192) 576 ['conv2d_98[0][0]']
ormalization)
activation_98 (Activation) (None, 52, 52, 192) 0 ['batch_normalization_98[0][0]']
max_pooling2d_5 (MaxPooling2D) (None, 25, 25, 192) 0 ['activation_98[0][0]']
conv2d_102 (Conv2D) (None, 25, 25, 64) 12288 ['max_pooling2d_5[0][0]']
batch_normalization_102 (Batch (None, 25, 25, 64) 192 ['conv2d_102[0][0]']
Normalization)
activation_102 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_102[0][0]']
conv2d_100 (Conv2D) (None, 25, 25, 48) 9216 ['max_pooling2d_5[0][0]']
conv2d_103 (Conv2D) (None, 25, 25, 96) 55296 ['activation_102[0][0]']
batch_normalization_100 (Batch (None, 25, 25, 48) 144 ['conv2d_100[0][0]']
Normalization)
batch_normalization_103 (Batch (None, 25, 25, 96) 288 ['conv2d_103[0][0]']
Normalization)
activation_100 (Activation) (None, 25, 25, 48) 0 ['batch_normalization_100[0][0]']
activation_103 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_103[0][0]']
average_pooling2d_9 (AveragePo (None, 25, 25, 192) 0 ['max_pooling2d_5[0][0]']
oling2D)
conv2d_99 (Conv2D) (None, 25, 25, 64) 12288 ['max_pooling2d_5[0][0]']
conv2d_101 (Conv2D) (None, 25, 25, 64) 76800 ['activation_100[0][0]']
conv2d_104 (Conv2D) (None, 25, 25, 96) 82944 ['activation_103[0][0]']
conv2d_105 (Conv2D) (None, 25, 25, 32) 6144 ['average_pooling2d_9[0][0]']
batch_normalization_99 (BatchN (None, 25, 25, 64) 192 ['conv2d_99[0][0]']
ormalization)
batch_normalization_101 (Batch (None, 25, 25, 64) 192 ['conv2d_101[0][0]']
Normalization)
batch_normalization_104 (Batch (None, 25, 25, 96) 288 ['conv2d_104[0][0]']
Normalization)
batch_normalization_105 (Batch (None, 25, 25, 32) 96 ['conv2d_105[0][0]']
Normalization)
activation_99 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_99[0][0]']
activation_101 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_101[0][0]']
activation_104 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_104[0][0]']
activation_105 (Activation) (None, 25, 25, 32) 0 ['batch_normalization_105[0][0]']
mixed0 (Concatenate) (None, 25, 25, 256) 0 ['activation_99[0][0]',
'activation_101[0][0]',
'activation_104[0][0]',
'activation_105[0][0]']
conv2d_109 (Conv2D) (None, 25, 25, 64) 16384 ['mixed0[0][0]']
batch_normalization_109 (Batch (None, 25, 25, 64) 192 ['conv2d_109[0][0]']
Normalization)
activation_109 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_109[0][0]']
conv2d_107 (Conv2D) (None, 25, 25, 48) 12288 ['mixed0[0][0]']
conv2d_110 (Conv2D) (None, 25, 25, 96) 55296 ['activation_109[0][0]']
batch_normalization_107 (Batch (None, 25, 25, 48) 144 ['conv2d_107[0][0]']
Normalization)
batch_normalization_110 (Batch (None, 25, 25, 96) 288 ['conv2d_110[0][0]']
Normalization)
activation_107 (Activation) (None, 25, 25, 48) 0 ['batch_normalization_107[0][0]']
activation_110 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_110[0][0]']
average_pooling2d_10 (AverageP (None, 25, 25, 256) 0 ['mixed0[0][0]']
ooling2D)
conv2d_106 (Conv2D) (None, 25, 25, 64) 16384 ['mixed0[0][0]']
conv2d_108 (Conv2D) (None, 25, 25, 64) 76800 ['activation_107[0][0]']
conv2d_111 (Conv2D) (None, 25, 25, 96) 82944 ['activation_110[0][0]']
conv2d_112 (Conv2D) (None, 25, 25, 64) 16384 ['average_pooling2d_10[0][0]']
batch_normalization_106 (Batch (None, 25, 25, 64) 192 ['conv2d_106[0][0]']
Normalization)
batch_normalization_108 (Batch (None, 25, 25, 64) 192 ['conv2d_108[0][0]']
Normalization)
batch_normalization_111 (Batch (None, 25, 25, 96) 288 ['conv2d_111[0][0]']
Normalization)
batch_normalization_112 (Batch (None, 25, 25, 64) 192 ['conv2d_112[0][0]']
Normalization)
activation_106 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_106[0][0]']
activation_108 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_108[0][0]']
activation_111 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_111[0][0]']
activation_112 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_112[0][0]']
mixed1 (Concatenate) (None, 25, 25, 288) 0 ['activation_106[0][0]',
'activation_108[0][0]',
'activation_111[0][0]',
'activation_112[0][0]']
conv2d_116 (Conv2D) (None, 25, 25, 64) 18432 ['mixed1[0][0]']
batch_normalization_116 (Batch (None, 25, 25, 64) 192 ['conv2d_116[0][0]']
Normalization)
activation_116 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_116[0][0]']
conv2d_114 (Conv2D) (None, 25, 25, 48) 13824 ['mixed1[0][0]']
conv2d_117 (Conv2D) (None, 25, 25, 96) 55296 ['activation_116[0][0]']
batch_normalization_114 (Batch (None, 25, 25, 48) 144 ['conv2d_114[0][0]']
Normalization)
batch_normalization_117 (Batch (None, 25, 25, 96) 288 ['conv2d_117[0][0]']
Normalization)
activation_114 (Activation) (None, 25, 25, 48) 0 ['batch_normalization_114[0][0]']
activation_117 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_117[0][0]']
average_pooling2d_11 (AverageP (None, 25, 25, 288) 0 ['mixed1[0][0]']
ooling2D)
conv2d_113 (Conv2D) (None, 25, 25, 64) 18432 ['mixed1[0][0]']
conv2d_115 (Conv2D) (None, 25, 25, 64) 76800 ['activation_114[0][0]']
conv2d_118 (Conv2D) (None, 25, 25, 96) 82944 ['activation_117[0][0]']
conv2d_119 (Conv2D) (None, 25, 25, 64) 18432 ['average_pooling2d_11[0][0]']
batch_normalization_113 (Batch (None, 25, 25, 64) 192 ['conv2d_113[0][0]']
Normalization)
batch_normalization_115 (Batch (None, 25, 25, 64) 192 ['conv2d_115[0][0]']
Normalization)
batch_normalization_118 (Batch (None, 25, 25, 96) 288 ['conv2d_118[0][0]']
Normalization)
batch_normalization_119 (Batch (None, 25, 25, 64) 192 ['conv2d_119[0][0]']
Normalization)
activation_113 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_113[0][0]']
activation_115 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_115[0][0]']
activation_118 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_118[0][0]']
activation_119 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_119[0][0]']
mixed2 (Concatenate) (None, 25, 25, 288) 0 ['activation_113[0][0]',
'activation_115[0][0]',
'activation_118[0][0]',
'activation_119[0][0]']
conv2d_121 (Conv2D) (None, 25, 25, 64) 18432 ['mixed2[0][0]']
batch_normalization_121 (Batch (None, 25, 25, 64) 192 ['conv2d_121[0][0]']
Normalization)
activation_121 (Activation) (None, 25, 25, 64) 0 ['batch_normalization_121[0][0]']
conv2d_122 (Conv2D) (None, 25, 25, 96) 55296 ['activation_121[0][0]']
batch_normalization_122 (Batch (None, 25, 25, 96) 288 ['conv2d_122[0][0]']
Normalization)
activation_122 (Activation) (None, 25, 25, 96) 0 ['batch_normalization_122[0][0]']
conv2d_120 (Conv2D) (None, 12, 12, 384) 995328 ['mixed2[0][0]']
conv2d_123 (Conv2D) (None, 12, 12, 96) 82944 ['activation_122[0][0]']
batch_normalization_120 (Batch (None, 12, 12, 384) 1152 ['conv2d_120[0][0]']
Normalization)
batch_normalization_123 (Batch (None, 12, 12, 96) 288 ['conv2d_123[0][0]']
Normalization)
activation_120 (Activation) (None, 12, 12, 384) 0 ['batch_normalization_120[0][0]']
activation_123 (Activation) (None, 12, 12, 96) 0 ['batch_normalization_123[0][0]']
max_pooling2d_6 (MaxPooling2D) (None, 12, 12, 288) 0 ['mixed2[0][0]']
mixed3 (Concatenate) (None, 12, 12, 768) 0 ['activation_120[0][0]',
'activation_123[0][0]',
'max_pooling2d_6[0][0]']
conv2d_128 (Conv2D) (None, 12, 12, 128) 98304 ['mixed3[0][0]']
batch_normalization_128 (Batch (None, 12, 12, 128) 384 ['conv2d_128[0][0]']
Normalization)
activation_128 (Activation) (None, 12, 12, 128) 0 ['batch_normalization_128[0][0]']
conv2d_129 (Conv2D) (None, 12, 12, 128) 114688 ['activation_128[0][0]']
batch_normalization_129 (Batch (None, 12, 12, 128) 384 ['conv2d_129[0][0]']
Normalization)
activation_129 (Activation) (None, 12, 12, 128) 0 ['batch_normalization_129[0][0]']
conv2d_125 (Conv2D) (None, 12, 12, 128) 98304 ['mixed3[0][0]']
conv2d_130 (Conv2D) (None, 12, 12, 128) 114688 ['activation_129[0][0]']
batch_normalization_125 (Batch (None, 12, 12, 128) 384 ['conv2d_125[0][0]']
Normalization)
batch_normalization_130 (Batch (None, 12, 12, 128) 384 ['conv2d_130[0][0]']
Normalization)
activation_125 (Activation) (None, 12, 12, 128) 0 ['batch_normalization_125[0][0]']
activation_130 (Activation) (None, 12, 12, 128) 0 ['batch_normalization_130[0][0]']
conv2d_126 (Conv2D) (None, 12, 12, 128) 114688 ['activation_125[0][0]']
conv2d_131 (Conv2D) (None, 12, 12, 128) 114688 ['activation_130[0][0]']
batch_normalization_126 (Batch (None, 12, 12, 128) 384 ['conv2d_126[0][0]']
Normalization)
batch_normalization_131 (Batch (None, 12, 12, 128) 384 ['conv2d_131[0][0]']
Normalization)
activation_126 (Activation) (None, 12, 12, 128) 0 ['batch_normalization_126[0][0]']
activation_131 (Activation) (None, 12, 12, 128) 0 ['batch_normalization_131[0][0]']
average_pooling2d_12 (AverageP (None, 12, 12, 768) 0 ['mixed3[0][0]']
ooling2D)
conv2d_124 (Conv2D) (None, 12, 12, 192) 147456 ['mixed3[0][0]']
conv2d_127 (Conv2D) (None, 12, 12, 192) 172032 ['activation_126[0][0]']
conv2d_132 (Conv2D) (None, 12, 12, 192) 172032 ['activation_131[0][0]']
conv2d_133 (Conv2D) (None, 12, 12, 192) 147456 ['average_pooling2d_12[0][0]']
batch_normalization_124 (Batch (None, 12, 12, 192) 576 ['conv2d_124[0][0]']
Normalization)
batch_normalization_127 (Batch (None, 12, 12, 192) 576 ['conv2d_127[0][0]']
Normalization)
batch_normalization_132 (Batch (None, 12, 12, 192) 576 ['conv2d_132[0][0]']
Normalization)
batch_normalization_133 (Batch (None, 12, 12, 192) 576 ['conv2d_133[0][0]']
Normalization)
activation_124 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_124[0][0]']
activation_127 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_127[0][0]']
activation_132 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_132[0][0]']
activation_133 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_133[0][0]']
mixed4 (Concatenate) (None, 12, 12, 768) 0 ['activation_124[0][0]',
'activation_127[0][0]',
'activation_132[0][0]',
'activation_133[0][0]']
conv2d_138 (Conv2D) (None, 12, 12, 160) 122880 ['mixed4[0][0]']
batch_normalization_138 (Batch (None, 12, 12, 160) 480 ['conv2d_138[0][0]']
Normalization)
activation_138 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_138[0][0]']
conv2d_139 (Conv2D) (None, 12, 12, 160) 179200 ['activation_138[0][0]']
batch_normalization_139 (Batch (None, 12, 12, 160) 480 ['conv2d_139[0][0]']
Normalization)
activation_139 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_139[0][0]']
conv2d_135 (Conv2D) (None, 12, 12, 160) 122880 ['mixed4[0][0]']
conv2d_140 (Conv2D) (None, 12, 12, 160) 179200 ['activation_139[0][0]']
batch_normalization_135 (Batch (None, 12, 12, 160) 480 ['conv2d_135[0][0]']
Normalization)
batch_normalization_140 (Batch (None, 12, 12, 160) 480 ['conv2d_140[0][0]']
Normalization)
activation_135 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_135[0][0]']
activation_140 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_140[0][0]']
conv2d_136 (Conv2D) (None, 12, 12, 160) 179200 ['activation_135[0][0]']
conv2d_141 (Conv2D) (None, 12, 12, 160) 179200 ['activation_140[0][0]']
batch_normalization_136 (Batch (None, 12, 12, 160) 480 ['conv2d_136[0][0]']
Normalization)
batch_normalization_141 (Batch (None, 12, 12, 160) 480 ['conv2d_141[0][0]']
Normalization)
activation_136 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_136[0][0]']
activation_141 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_141[0][0]']
average_pooling2d_13 (AverageP (None, 12, 12, 768) 0 ['mixed4[0][0]']
ooling2D)
conv2d_134 (Conv2D) (None, 12, 12, 192) 147456 ['mixed4[0][0]']
conv2d_137 (Conv2D) (None, 12, 12, 192) 215040 ['activation_136[0][0]']
conv2d_142 (Conv2D) (None, 12, 12, 192) 215040 ['activation_141[0][0]']
conv2d_143 (Conv2D) (None, 12, 12, 192) 147456 ['average_pooling2d_13[0][0]']
batch_normalization_134 (Batch (None, 12, 12, 192) 576 ['conv2d_134[0][0]']
Normalization)
batch_normalization_137 (Batch (None, 12, 12, 192) 576 ['conv2d_137[0][0]']
Normalization)
batch_normalization_142 (Batch (None, 12, 12, 192) 576 ['conv2d_142[0][0]']
Normalization)
batch_normalization_143 (Batch (None, 12, 12, 192) 576 ['conv2d_143[0][0]']
Normalization)
activation_134 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_134[0][0]']
activation_137 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_137[0][0]']
activation_142 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_142[0][0]']
activation_143 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_143[0][0]']
mixed5 (Concatenate) (None, 12, 12, 768) 0 ['activation_134[0][0]',
'activation_137[0][0]',
'activation_142[0][0]',
'activation_143[0][0]']
conv2d_148 (Conv2D) (None, 12, 12, 160) 122880 ['mixed5[0][0]']
batch_normalization_148 (Batch (None, 12, 12, 160) 480 ['conv2d_148[0][0]']
Normalization)
activation_148 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_148[0][0]']
conv2d_149 (Conv2D) (None, 12, 12, 160) 179200 ['activation_148[0][0]']
batch_normalization_149 (Batch (None, 12, 12, 160) 480 ['conv2d_149[0][0]']
Normalization)
activation_149 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_149[0][0]']
conv2d_145 (Conv2D) (None, 12, 12, 160) 122880 ['mixed5[0][0]']
conv2d_150 (Conv2D) (None, 12, 12, 160) 179200 ['activation_149[0][0]']
batch_normalization_145 (Batch (None, 12, 12, 160) 480 ['conv2d_145[0][0]']
Normalization)
batch_normalization_150 (Batch (None, 12, 12, 160) 480 ['conv2d_150[0][0]']
Normalization)
activation_145 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_145[0][0]']
activation_150 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_150[0][0]']
conv2d_146 (Conv2D) (None, 12, 12, 160) 179200 ['activation_145[0][0]']
conv2d_151 (Conv2D) (None, 12, 12, 160) 179200 ['activation_150[0][0]']
batch_normalization_146 (Batch (None, 12, 12, 160) 480 ['conv2d_146[0][0]']
Normalization)
batch_normalization_151 (Batch (None, 12, 12, 160) 480 ['conv2d_151[0][0]']
Normalization)
activation_146 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_146[0][0]']
activation_151 (Activation) (None, 12, 12, 160) 0 ['batch_normalization_151[0][0]']
average_pooling2d_14 (AverageP (None, 12, 12, 768) 0 ['mixed5[0][0]']
ooling2D)
conv2d_144 (Conv2D) (None, 12, 12, 192) 147456 ['mixed5[0][0]']
conv2d_147 (Conv2D) (None, 12, 12, 192) 215040 ['activation_146[0][0]']
conv2d_152 (Conv2D) (None, 12, 12, 192) 215040 ['activation_151[0][0]']
conv2d_153 (Conv2D) (None, 12, 12, 192) 147456 ['average_pooling2d_14[0][0]']
batch_normalization_144 (Batch (None, 12, 12, 192) 576 ['conv2d_144[0][0]']
Normalization)
batch_normalization_147 (Batch (None, 12, 12, 192) 576 ['conv2d_147[0][0]']
Normalization)
batch_normalization_152 (Batch (None, 12, 12, 192) 576 ['conv2d_152[0][0]']
Normalization)
batch_normalization_153 (Batch (None, 12, 12, 192) 576 ['conv2d_153[0][0]']
Normalization)
activation_144 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_144[0][0]']
activation_147 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_147[0][0]']
activation_152 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_152[0][0]']
activation_153 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_153[0][0]']
mixed6 (Concatenate) (None, 12, 12, 768) 0 ['activation_144[0][0]',
'activation_147[0][0]',
'activation_152[0][0]',
'activation_153[0][0]']
conv2d_158 (Conv2D) (None, 12, 12, 192) 147456 ['mixed6[0][0]']
batch_normalization_158 (Batch (None, 12, 12, 192) 576 ['conv2d_158[0][0]']
Normalization)
activation_158 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_158[0][0]']
conv2d_159 (Conv2D) (None, 12, 12, 192) 258048 ['activation_158[0][0]']
batch_normalization_159 (Batch (None, 12, 12, 192) 576 ['conv2d_159[0][0]']
Normalization)
activation_159 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_159[0][0]']
conv2d_155 (Conv2D) (None, 12, 12, 192) 147456 ['mixed6[0][0]']
conv2d_160 (Conv2D) (None, 12, 12, 192) 258048 ['activation_159[0][0]']
batch_normalization_155 (Batch (None, 12, 12, 192) 576 ['conv2d_155[0][0]']
Normalization)
batch_normalization_160 (Batch (None, 12, 12, 192) 576 ['conv2d_160[0][0]']
Normalization)
activation_155 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_155[0][0]']
activation_160 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_160[0][0]']
conv2d_156 (Conv2D) (None, 12, 12, 192) 258048 ['activation_155[0][0]']
conv2d_161 (Conv2D) (None, 12, 12, 192) 258048 ['activation_160[0][0]']
batch_normalization_156 (Batch (None, 12, 12, 192) 576 ['conv2d_156[0][0]']
Normalization)
batch_normalization_161 (Batch (None, 12, 12, 192) 576 ['conv2d_161[0][0]']
Normalization)
activation_156 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_156[0][0]']
activation_161 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_161[0][0]']
average_pooling2d_15 (AverageP (None, 12, 12, 768) 0 ['mixed6[0][0]']
ooling2D)
conv2d_154 (Conv2D) (None, 12, 12, 192) 147456 ['mixed6[0][0]']
conv2d_157 (Conv2D) (None, 12, 12, 192) 258048 ['activation_156[0][0]']
conv2d_162 (Conv2D) (None, 12, 12, 192) 258048 ['activation_161[0][0]']
conv2d_163 (Conv2D) (None, 12, 12, 192) 147456 ['average_pooling2d_15[0][0]']
batch_normalization_154 (Batch (None, 12, 12, 192) 576 ['conv2d_154[0][0]']
Normalization)
batch_normalization_157 (Batch (None, 12, 12, 192) 576 ['conv2d_157[0][0]']
Normalization)
batch_normalization_162 (Batch (None, 12, 12, 192) 576 ['conv2d_162[0][0]']
Normalization)
batch_normalization_163 (Batch (None, 12, 12, 192) 576 ['conv2d_163[0][0]']
Normalization)
activation_154 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_154[0][0]']
activation_157 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_157[0][0]']
activation_162 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_162[0][0]']
activation_163 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_163[0][0]']
mixed7 (Concatenate) (None, 12, 12, 768) 0 ['activation_154[0][0]',
'activation_157[0][0]',
'activation_162[0][0]',
'activation_163[0][0]']
conv2d_166 (Conv2D) (None, 12, 12, 192) 147456 ['mixed7[0][0]']
batch_normalization_166 (Batch (None, 12, 12, 192) 576 ['conv2d_166[0][0]']
Normalization)
activation_166 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_166[0][0]']
conv2d_167 (Conv2D) (None, 12, 12, 192) 258048 ['activation_166[0][0]']
batch_normalization_167 (Batch (None, 12, 12, 192) 576 ['conv2d_167[0][0]']
Normalization)
activation_167 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_167[0][0]']
conv2d_164 (Conv2D) (None, 12, 12, 192) 147456 ['mixed7[0][0]']
conv2d_168 (Conv2D) (None, 12, 12, 192) 258048 ['activation_167[0][0]']
batch_normalization_164 (Batch (None, 12, 12, 192) 576 ['conv2d_164[0][0]']
Normalization)
batch_normalization_168 (Batch (None, 12, 12, 192) 576 ['conv2d_168[0][0]']
Normalization)
activation_164 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_164[0][0]']
activation_168 (Activation) (None, 12, 12, 192) 0 ['batch_normalization_168[0][0]']
conv2d_165 (Conv2D) (None, 5, 5, 320) 552960 ['activation_164[0][0]']
conv2d_169 (Conv2D) (None, 5, 5, 192) 331776 ['activation_168[0][0]']
batch_normalization_165 (Batch (None, 5, 5, 320) 960 ['conv2d_165[0][0]']
Normalization)
batch_normalization_169 (Batch (None, 5, 5, 192) 576 ['conv2d_169[0][0]']
Normalization)
activation_165 (Activation) (None, 5, 5, 320) 0 ['batch_normalization_165[0][0]']
activation_169 (Activation) (None, 5, 5, 192) 0 ['batch_normalization_169[0][0]']
max_pooling2d_7 (MaxPooling2D) (None, 5, 5, 768) 0 ['mixed7[0][0]']
mixed8 (Concatenate) (None, 5, 5, 1280) 0 ['activation_165[0][0]',
'activation_169[0][0]',
'max_pooling2d_7[0][0]']
conv2d_174 (Conv2D) (None, 5, 5, 448) 573440 ['mixed8[0][0]']
batch_normalization_174 (Batch (None, 5, 5, 448) 1344 ['conv2d_174[0][0]']
Normalization)
activation_174 (Activation) (None, 5, 5, 448) 0 ['batch_normalization_174[0][0]']
conv2d_171 (Conv2D) (None, 5, 5, 384) 491520 ['mixed8[0][0]']
conv2d_175 (Conv2D) (None, 5, 5, 384) 1548288 ['activation_174[0][0]']
batch_normalization_171 (Batch (None, 5, 5, 384) 1152 ['conv2d_171[0][0]']
Normalization)
batch_normalization_175 (Batch (None, 5, 5, 384) 1152 ['conv2d_175[0][0]']
Normalization)
activation_171 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_171[0][0]']
activation_175 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_175[0][0]']
conv2d_172 (Conv2D) (None, 5, 5, 384) 442368 ['activation_171[0][0]']
conv2d_173 (Conv2D) (None, 5, 5, 384) 442368 ['activation_171[0][0]']
conv2d_176 (Conv2D) (None, 5, 5, 384) 442368 ['activation_175[0][0]']
conv2d_177 (Conv2D) (None, 5, 5, 384) 442368 ['activation_175[0][0]']
average_pooling2d_16 (AverageP (None, 5, 5, 1280) 0 ['mixed8[0][0]']
ooling2D)
conv2d_170 (Conv2D) (None, 5, 5, 320) 409600 ['mixed8[0][0]']
batch_normalization_172 (Batch (None, 5, 5, 384) 1152 ['conv2d_172[0][0]']
Normalization)
batch_normalization_173 (Batch (None, 5, 5, 384) 1152 ['conv2d_173[0][0]']
Normalization)
batch_normalization_176 (Batch (None, 5, 5, 384) 1152 ['conv2d_176[0][0]']
Normalization)
batch_normalization_177 (Batch (None, 5, 5, 384) 1152 ['conv2d_177[0][0]']
Normalization)
conv2d_178 (Conv2D) (None, 5, 5, 192) 245760 ['average_pooling2d_16[0][0]']
batch_normalization_170 (Batch (None, 5, 5, 320) 960 ['conv2d_170[0][0]']
Normalization)
activation_172 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_172[0][0]']
activation_173 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_173[0][0]']
activation_176 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_176[0][0]']
activation_177 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_177[0][0]']
batch_normalization_178 (Batch (None, 5, 5, 192) 576 ['conv2d_178[0][0]']
Normalization)
activation_170 (Activation) (None, 5, 5, 320) 0 ['batch_normalization_170[0][0]']
mixed9_0 (Concatenate) (None, 5, 5, 768) 0 ['activation_172[0][0]',
'activation_173[0][0]']
concatenate_2 (Concatenate) (None, 5, 5, 768) 0 ['activation_176[0][0]',
'activation_177[0][0]']
activation_178 (Activation) (None, 5, 5, 192) 0 ['batch_normalization_178[0][0]']
mixed9 (Concatenate) (None, 5, 5, 2048) 0 ['activation_170[0][0]',
'mixed9_0[0][0]',
'concatenate_2[0][0]',
'activation_178[0][0]']
conv2d_183 (Conv2D) (None, 5, 5, 448) 917504 ['mixed9[0][0]']
batch_normalization_183 (Batch (None, 5, 5, 448) 1344 ['conv2d_183[0][0]']
Normalization)
activation_183 (Activation) (None, 5, 5, 448) 0 ['batch_normalization_183[0][0]']
conv2d_180 (Conv2D) (None, 5, 5, 384) 786432 ['mixed9[0][0]']
conv2d_184 (Conv2D) (None, 5, 5, 384) 1548288 ['activation_183[0][0]']
batch_normalization_180 (Batch (None, 5, 5, 384) 1152 ['conv2d_180[0][0]']
Normalization)
batch_normalization_184 (Batch (None, 5, 5, 384) 1152 ['conv2d_184[0][0]']
Normalization)
activation_180 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_180[0][0]']
activation_184 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_184[0][0]']
conv2d_181 (Conv2D) (None, 5, 5, 384) 442368 ['activation_180[0][0]']
conv2d_182 (Conv2D) (None, 5, 5, 384) 442368 ['activation_180[0][0]']
conv2d_185 (Conv2D) (None, 5, 5, 384) 442368 ['activation_184[0][0]']
conv2d_186 (Conv2D) (None, 5, 5, 384) 442368 ['activation_184[0][0]']
average_pooling2d_17 (AverageP (None, 5, 5, 2048) 0 ['mixed9[0][0]']
ooling2D)
conv2d_179 (Conv2D) (None, 5, 5, 320) 655360 ['mixed9[0][0]']
batch_normalization_181 (Batch (None, 5, 5, 384) 1152 ['conv2d_181[0][0]']
Normalization)
batch_normalization_182 (Batch (None, 5, 5, 384) 1152 ['conv2d_182[0][0]']
Normalization)
batch_normalization_185 (Batch (None, 5, 5, 384) 1152 ['conv2d_185[0][0]']
Normalization)
batch_normalization_186 (Batch (None, 5, 5, 384) 1152 ['conv2d_186[0][0]']
Normalization)
conv2d_187 (Conv2D) (None, 5, 5, 192) 393216 ['average_pooling2d_17[0][0]']
batch_normalization_179 (Batch (None, 5, 5, 320) 960 ['conv2d_179[0][0]']
Normalization)
activation_181 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_181[0][0]']
activation_182 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_182[0][0]']
activation_185 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_185[0][0]']
activation_186 (Activation) (None, 5, 5, 384) 0 ['batch_normalization_186[0][0]']
batch_normalization_187 (Batch (None, 5, 5, 192) 576 ['conv2d_187[0][0]']
Normalization)
activation_179 (Activation) (None, 5, 5, 320) 0 ['batch_normalization_179[0][0]']
mixed9_1 (Concatenate) (None, 5, 5, 768) 0 ['activation_181[0][0]',
'activation_182[0][0]']
concatenate_3 (Concatenate) (None, 5, 5, 768) 0 ['activation_185[0][0]',
'activation_186[0][0]']
activation_187 (Activation) (None, 5, 5, 192) 0 ['batch_normalization_187[0][0]']
mixed10 (Concatenate) (None, 5, 5, 2048) 0 ['activation_179[0][0]',
'mixed9_1[0][0]',
'concatenate_3[0][0]',
'activation_187[0][0]']
flatten_1 (Flatten) (None, 51200) 0 ['mixed10[0][0]']
dense_1 (Dense) (None, 10) 512010 ['flatten_1[0][0]']
==================================================================================================
Total params: 22,314,794
Trainable params: 512,010
Non-trainable params: 21,802,784
__________________________________________________________________________________________________
# Defining the cost and model optimization method to use
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
# Using the Image Data Generator to import the images from the dataset
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
# Training Generator
training_set = train_datagen.flow_from_directory('/content/gdrive/My Drive/Colab Notebooks/dataset8020/train',
target_size = (224, 224),
batch_size = 32,
class_mode = 'categorical')
Found 8000 images belonging to 10 classes.
# Testing Generator
test_set = test_datagen.flow_from_directory('/content/gdrive/My Drive/Colab Notebooks/dataset8020/val',
target_size = (224, 224),
batch_size = 32,
class_mode = 'categorical')
Found 2000 images belonging to 10 classes.
# fit the model, it will take some time to execute
r = model.fit(
training_set,
validation_data=test_set,
epochs=5,
steps_per_epoch=len(training_set),
validation_steps=len(test_set)
)
Epoch 1/5 250/250 [==============================] - 1502s 6s/step - loss: 4.0302 - accuracy: 0.6111 - val_loss: 2.2804 - val_accuracy: 0.7075 Epoch 2/5 250/250 [==============================] - 1007s 4s/step - loss: 1.8126 - accuracy: 0.7675 - val_loss: 1.3260 - val_accuracy: 0.8045 Epoch 3/5 250/250 [==============================] - 1015s 4s/step - loss: 1.8028 - accuracy: 0.7970 - val_loss: 2.2641 - val_accuracy: 0.7620 Epoch 4/5 250/250 [==============================] - 1022s 4s/step - loss: 1.5416 - accuracy: 0.8234 - val_loss: 0.9595 - val_accuracy: 0.8770 Epoch 5/5 250/250 [==============================] - 1020s 4s/step - loss: 1.5698 - accuracy: 0.8371 - val_loss: 1.3281 - val_accuracy: 0.8495
# Plot the Loss and Accuracy
# Loss
model.evaluate(test_set)
plt.plot(r.history['loss'], label='train loss')
plt.plot(r.history['val_loss'], label='val loss')
plt.legend()
plt.show()
# Accuracy
plt.plot(r.history['accuracy'], label='train acc')
plt.plot(r.history['val_accuracy'], label='val acc')
plt.legend()
plt.show()
63/63 [==============================] - 188s 3s/step - loss: 1.3281 - accuracy: 0.8495
# Saving the model as a h5 file
from tensorflow.keras.models import load_model
model.save('model_inception.h5')
model = load_model('model_inception.h5')
--------------------------------------------------------------------------- OSError Traceback (most recent call last) <ipython-input-14-6a079f9de6f3> in <module> ----> 1 model = load_model('model_inception.h5') /usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs) 65 except Exception as e: # pylint: disable=broad-except 66 filtered_tb = _process_traceback_frames(e.__traceback__) ---> 67 raise e.with_traceback(filtered_tb) from None 68 finally: 69 del filtered_tb /usr/local/lib/python3.7/dist-packages/keras/saving/save.py in load_model(filepath, custom_objects, compile, options) 204 if isinstance(filepath_str, str): 205 if not tf.io.gfile.exists(filepath_str): --> 206 raise IOError(f'No file or directory found at {filepath_str}') 207 208 if tf.io.gfile.isdir(filepath_str): OSError: No file or directory found at model_inception.h5
y_pred = model.predict(test_set)
63/63 [==============================] - 195s 3s/step
y_pred
array([[0.0000000e+00, 1.9883246e-34, 8.9775664e-01, ..., 1.0224147e-01,
2.9612454e-15, 1.8457501e-06],
[1.0475146e-31, 2.4344494e-23, 1.2251389e-19, ..., 9.9999994e-01,
1.2092257e-21, 6.1555072e-10],
[6.6823721e-15, 1.9258282e-06, 2.0794512e-06, ..., 3.5903615e-01,
6.8596691e-11, 2.8802851e-01],
...,
[9.9999994e-01, 1.1173088e-09, 7.8183576e-19, ..., 9.5940103e-11,
4.4835802e-14, 5.0567840e-16],
[9.4067271e-14, 3.9219127e-18, 3.4441447e-07, ..., 9.9999624e-01,
3.0819001e-06, 4.1683735e-20],
[1.0242016e-26, 5.1891837e-12, 5.6711569e-10, ..., 1.2128113e-14,
3.9022973e-15, 1.2875653e-19]], dtype=float32)
y_pred = np.argmax(y_pred, axis=1)
y_pred
array([2, 7, 7, ..., 0, 7, 6])
loss_final, accuracy_final = model.evaluate(test_set)
63/63 [==============================] - 189s 3s/step - loss: 1.3281 - accuracy: 0.8495
print("Final loss: {:.2f}".format(loss_final))
print("Final accuracy: {:.2f}".format(accuracy_final))
Final loss: 1.33 Final accuracy: 0.85
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from tensorflow.keras.preprocessing import image
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
path = '/content/' + fn
img = image.load_img(path, target_size=(224, 224))
x = image.img_to_array(img)
plt.imshow(x/255.)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=32)
index = tf.argmax(classes[0], axis=0)
print(classes[0])
if classes[0][0]==1:
print("Bacterial spot")
elif classes[0][1]==1:
print("Early blight")
elif classes[0][2]==1:
print("Late blight")
elif classes[0][3]==1:
print("Leaf Mold")
elif classes[0][4]==1:
print("Septoria Leaf Spot")
elif classes[0][5]==1:
print("Spider Mites")
elif classes[0][6]==1:
print("Target Spot")
elif classes[0][7]==1:
print("Tomato Yellow Leaf Curl Virus")
elif classes[0][8]==1:
print("Tomato Mosaic Virus")
else:
print("Healthy")
Saving mosaic.jpg to mosaic (1).jpg 1/1 [==============================] - 0s 144ms/step 3 Leaf Mold
# Basic Imports
import numpy as np
import matplotlib.pyplot as plt
from glob import glob
from PIL import Image
# Imports untuk membangun CNN
from keras.layers import Input, Lambda, Dense, Flatten
from keras.models import Model
from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential, load_model
# Ignore Warnings
import warnings
warnings.filterwarnings("ignore")
# Membuat semua foto ter-resize pada ukuran 224x224
IMAGE_SIZE = [224, 224]
categories = ["Tomato___Bacterial_spot", "Tomato___Early_blight", "Tomato___Healthy", "Tomato___Late_blight",
"Tomato___Leaf_Mold", "Tomato___Mosaic_virus", "Tomato___Septoria_leaf_spot", "Tomato___Spider_mites", "Tomato___Target_Spot", "Tomato___Yellow_Leaf_Curl_Virus"]
# Mencari file yang terkait pada folder dataset
train_path = '/content/gdrive/MyDrive/Colab Notebooks/dataset8020/train/'
test_path = '/content/gdrive/MyDrive/Colab Notebooks/dataset8020/val/'
def normalize(input_image, input_mask):
input_image = tf.cast(input_image, tf.float32) / 255.0
input_mask -= 1
return input_image, input_mask
# Menambahkan Layer untuk Preprocessing pada VGG
vgg = VGG16(input_shape = IMAGE_SIZE + [3],
weights = 'imagenet',
include_top=False)
# Untuk perintah menolak men training data yang telah digunakan sebelumnya
for layer in vgg.layers:
layer.trainable = False
# Folders in the Training Set
folders = glob('/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/*')
folders
['/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Spider_mites', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Septoria_leaf_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Late_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Mosaic_virus', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Leaf_Mold', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Healthy', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Bacterial_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Early_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Target_Spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Yellow_Leaf_Curl_Virus']
x = Flatten()(vgg.output)
x = Dense(1000, activation='relu')(x)
# Lapisan Terakhir dengan aktivasi softmax untuk output biner
prediction = Dense(len(categories), activation='softmax')(x)
# Membuat obbjek model
model = Model(inputs=vgg.input, outputs=prediction)
# Melihat struktur model
model.summary()
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 224, 224, 3)] 0
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0
block2_conv1 (Conv2D) (None, 112, 112, 128) 73856
block2_conv2 (Conv2D) (None, 112, 112, 128) 147584
block2_pool (MaxPooling2D) (None, 56, 56, 128) 0
block3_conv1 (Conv2D) (None, 56, 56, 256) 295168
block3_conv2 (Conv2D) (None, 56, 56, 256) 590080
block3_conv3 (Conv2D) (None, 56, 56, 256) 590080
block3_pool (MaxPooling2D) (None, 28, 28, 256) 0
block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160
block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808
block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808
block4_pool (MaxPooling2D) (None, 14, 14, 512) 0
block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808
block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808
block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808
block5_pool (MaxPooling2D) (None, 7, 7, 512) 0
flatten_1 (Flatten) (None, 25088) 0
dense_2 (Dense) (None, 1000) 25089000
dense_3 (Dense) (None, 10) 10010
=================================================================
Total params: 39,813,698
Trainable params: 25,099,010
Non-trainable params: 14,714,688
_________________________________________________________________
# tell the model what cost and optimization method to use
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory(train_path,
target_size = (224, 224),
batch_size = 32,
class_mode = 'categorical')
test_set = test_datagen.flow_from_directory(test_path,
target_size = (224, 224),
batch_size = 32,
class_mode = 'categorical')
Found 8000 images belonging to 10 classes. Found 2000 images belonging to 10 classes.
# Mencocokan model
r = model.fit_generator(
training_set,
validation_data=test_set,
epochs=5,
steps_per_epoch=len(training_set),
validation_steps=len(test_set)
)
Epoch 1/5 250/250 [==============================] - 3828s 15s/step - loss: 1.4204 - accuracy: 0.6785 - val_loss: 0.5440 - val_accuracy: 0.8035 Epoch 2/5 250/250 [==============================] - 117s 469ms/step - loss: 0.5472 - accuracy: 0.8126 - val_loss: 0.4228 - val_accuracy: 0.8455 Epoch 3/5 250/250 [==============================] - 118s 470ms/step - loss: 0.3846 - accuracy: 0.8696 - val_loss: 0.3903 - val_accuracy: 0.8685 Epoch 4/5 250/250 [==============================] - 118s 472ms/step - loss: 0.3630 - accuracy: 0.8710 - val_loss: 0.3219 - val_accuracy: 0.8870 Epoch 5/5 250/250 [==============================] - 117s 468ms/step - loss: 0.3021 - accuracy: 0.8931 - val_loss: 0.2770 - val_accuracy: 0.9050
# Plot the Loss and Accuracy
# Loss
model.evaluate(test_set)
plt.plot(r.history['loss'], label='train loss')
plt.plot(r.history['val_loss'], label='val loss')
plt.legend()
plt.show()
plt.savefig('LossVal_loss')
# Accuracy
plt.plot(r.history['accuracy'], label='train acc')
plt.plot(r.history['val_accuracy'], label='val acc')
plt.legend()
plt.show()
plt.savefig('AccVal_acc')
63/63 [==============================] - 10s 151ms/step - loss: 0.2770 - accuracy: 0.9050
<Figure size 432x288 with 0 Axes>
# Saving the model as a h5 file
from tensorflow.keras.models import load_model
model.save('vgg16_model.h5')
model = load_model('vgg16_model.h5')
y_pred = model.predict(test_set)
63/63 [==============================] - 11s 168ms/step
y_pred
array([[1.5418239e-04, 7.6563996e-03, 3.5058329e-05, ..., 5.9890544e-01,
6.0090553e-02, 5.9241982e-04],
[1.9848589e-09, 3.0925603e-06, 6.3380703e-08, ..., 1.1981122e-05,
8.5274069e-06, 2.9561184e-08],
[2.8317691e-05, 2.0588029e-03, 1.0515270e-06, ..., 1.4159037e-02,
1.1849840e-02, 1.9398154e-04],
...,
[4.0504841e-05, 2.2264179e-04, 2.0513899e-07, ..., 4.9343280e-04,
4.1385425e-05, 9.9880099e-01],
[5.0203088e-03, 2.8763310e-05, 4.9834182e-07, ..., 8.6154260e-02,
9.0686584e-01, 2.8586022e-05],
[3.1297377e-06, 9.3861883e-05, 1.5117957e-05, ..., 9.9851545e-03,
8.8743404e-02, 9.8697354e-05]], dtype=float32)
y_pred = np.argmax(y_pred, axis=1)
y_pred
array([7, 5, 4, ..., 9, 8, 4])
loss_final, accuracy_final = model.evaluate(test_set)
63/63 [==============================] - 14s 219ms/step - loss: 0.2770 - accuracy: 0.9050
print("Final loss: {:.2f}".format(loss_final))
print("Final accuracy: {:.2f}".format(accuracy_final))
Final loss: 0.28 Final accuracy: 0.90
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
path = '/content/' + fn
img = image.load_img(path, target_size=(224, 224))
x = image.img_to_array(img)
plt.imshow(x/255.)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=32)
index = tf.argmax(classes[0], axis=0)
print(classes[0])
if classes[0][0]==1:
print("Bacterial spot")
elif classes[0][1]==1:
print("Early blight")
elif classes[0][2]==1:
print("Late blight")
elif classes[0][3]==1:
print("Leaf Mold")
elif classes[0][4]==1:
print("Septoria Leaf Spot")
elif classes[0][5]==1:
print("Spider Mites")
elif classes[0][6]==1:
print("Target Spot")
elif classes[0][7]==1:
print("Tomato Yellow Leaf Curl Virus")
elif classes[0][8]==1:
print("Tomato Mosaic Virus")
else:
print("Healthy")
Saving healthy.jpg to healthy.jpg 1/1 [==============================] - 1s 782ms/step 1 Early blight
# Basic Imports
import numpy as np
import matplotlib.pyplot as plt
from glob import glob
from PIL import Image
# Imports untuk membangun model
from tensorflow import keras
from keras.models import Model
from tensorflow.keras.applications import ResNet152V2
from tensorflow.keras.layers import GlobalAveragePooling2D, Dense
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential, load_model
# Ignore Warnings
import warnings
warnings.filterwarnings("ignore")
from google.colab import drive
drive.mount("/content/gdrive")
Mounted at /content/gdrive
import os
os.chdir('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/')
os.listdir()
['vgg16_model.h5', 'model_inception.h5', 'model_Resnet152V2.h5', 'train', 'val', 'model_resnet152V2.h5']
# Folders in the Train Set
folders = glob('/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/*')
folders
['/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Bacterial_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Early_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Healthy', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Late_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Leaf_Mold', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Mosaic_virus', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Septoria_leaf_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Spider_mites', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Target_Spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/train/Tomato___Yellow_Leaf_Curl_Virus']
# Folders in the Test Set
folders = glob('/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/*')
folders
['/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Bacterial_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Early_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Healthy', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Late_blight', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Leaf_Mold', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Mosaic_virus', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Septoria_leaf_spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Spider_mites', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Target_Spot', '/content/gdrive/My Drive/Colab Notebooks/dataset8020/val/Tomato___Yellow_Leaf_Curl_Virus']
#Forming Dataset
datagen = keras.preprocessing.image.ImageDataGenerator(rescale=1/255)
# Training and validation dataset
train = datagen.flow_from_directory('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/train/', seed=123, subset='training')
# Test dataset for evaluation
datagen2 = keras.preprocessing.image.ImageDataGenerator(rescale=1/255)
test = datagen2.flow_from_directory('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/val/')
Found 8000 images belonging to 10 classes. Found 2000 images belonging to 10 classes.
# Training data visualization
classes = os.listdir('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/train')
plt.figure(figsize=(25,10))
for i in enumerate(classes):
pic = os.listdir('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/train/'+i[1])[0]
image = Image.open('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/train/'+i[1]+'/'+pic)
image = np.asarray(image)
plt.subplot(2,5,i[0]+1)
plt.title('{0} / Shape = {1}'.format(i[1], image.shape))
plt.imshow(image)
plt.show()
def normalize(input_image, input_mask):
input_image = tf.cast(input_image, tf.float32) / 255.0
input_mask -= 1
return input_image, input_mask
# Function to initialize model (ResNet152V2)
def get_model():
base_model = ResNet152V2(input_shape=(256,256,3), include_top=False)
for layers in base_model.layers[:140]:
layers.trainable = False
for layers in base_model.layers[140:]:
layers.trainable = True
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1000, activation='relu')(x)
pred = Dense(10, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=pred)
return model
# Model initialization
model = get_model()
model.summary()
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet152v2_weights_tf_dim_ordering_tf_kernels_notop.h5
234545216/234545216 [==============================] - 11s 0us/step
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) [(None, 256, 256, 3 0 []
)]
conv1_pad (ZeroPadding2D) (None, 262, 262, 3) 0 ['input_1[0][0]']
conv1_conv (Conv2D) (None, 128, 128, 64 9472 ['conv1_pad[0][0]']
)
pool1_pad (ZeroPadding2D) (None, 130, 130, 64 0 ['conv1_conv[0][0]']
)
pool1_pool (MaxPooling2D) (None, 64, 64, 64) 0 ['pool1_pad[0][0]']
conv2_block1_preact_bn (BatchN (None, 64, 64, 64) 256 ['pool1_pool[0][0]']
ormalization)
conv2_block1_preact_relu (Acti (None, 64, 64, 64) 0 ['conv2_block1_preact_bn[0][0]']
vation)
conv2_block1_1_conv (Conv2D) (None, 64, 64, 64) 4096 ['conv2_block1_preact_relu[0][0]'
]
conv2_block1_1_bn (BatchNormal (None, 64, 64, 64) 256 ['conv2_block1_1_conv[0][0]']
ization)
conv2_block1_1_relu (Activatio (None, 64, 64, 64) 0 ['conv2_block1_1_bn[0][0]']
n)
conv2_block1_2_pad (ZeroPaddin (None, 66, 66, 64) 0 ['conv2_block1_1_relu[0][0]']
g2D)
conv2_block1_2_conv (Conv2D) (None, 64, 64, 64) 36864 ['conv2_block1_2_pad[0][0]']
conv2_block1_2_bn (BatchNormal (None, 64, 64, 64) 256 ['conv2_block1_2_conv[0][0]']
ization)
conv2_block1_2_relu (Activatio (None, 64, 64, 64) 0 ['conv2_block1_2_bn[0][0]']
n)
conv2_block1_0_conv (Conv2D) (None, 64, 64, 256) 16640 ['conv2_block1_preact_relu[0][0]'
]
conv2_block1_3_conv (Conv2D) (None, 64, 64, 256) 16640 ['conv2_block1_2_relu[0][0]']
conv2_block1_out (Add) (None, 64, 64, 256) 0 ['conv2_block1_0_conv[0][0]',
'conv2_block1_3_conv[0][0]']
conv2_block2_preact_bn (BatchN (None, 64, 64, 256) 1024 ['conv2_block1_out[0][0]']
ormalization)
conv2_block2_preact_relu (Acti (None, 64, 64, 256) 0 ['conv2_block2_preact_bn[0][0]']
vation)
conv2_block2_1_conv (Conv2D) (None, 64, 64, 64) 16384 ['conv2_block2_preact_relu[0][0]'
]
conv2_block2_1_bn (BatchNormal (None, 64, 64, 64) 256 ['conv2_block2_1_conv[0][0]']
ization)
conv2_block2_1_relu (Activatio (None, 64, 64, 64) 0 ['conv2_block2_1_bn[0][0]']
n)
conv2_block2_2_pad (ZeroPaddin (None, 66, 66, 64) 0 ['conv2_block2_1_relu[0][0]']
g2D)
conv2_block2_2_conv (Conv2D) (None, 64, 64, 64) 36864 ['conv2_block2_2_pad[0][0]']
conv2_block2_2_bn (BatchNormal (None, 64, 64, 64) 256 ['conv2_block2_2_conv[0][0]']
ization)
conv2_block2_2_relu (Activatio (None, 64, 64, 64) 0 ['conv2_block2_2_bn[0][0]']
n)
conv2_block2_3_conv (Conv2D) (None, 64, 64, 256) 16640 ['conv2_block2_2_relu[0][0]']
conv2_block2_out (Add) (None, 64, 64, 256) 0 ['conv2_block1_out[0][0]',
'conv2_block2_3_conv[0][0]']
conv2_block3_preact_bn (BatchN (None, 64, 64, 256) 1024 ['conv2_block2_out[0][0]']
ormalization)
conv2_block3_preact_relu (Acti (None, 64, 64, 256) 0 ['conv2_block3_preact_bn[0][0]']
vation)
conv2_block3_1_conv (Conv2D) (None, 64, 64, 64) 16384 ['conv2_block3_preact_relu[0][0]'
]
conv2_block3_1_bn (BatchNormal (None, 64, 64, 64) 256 ['conv2_block3_1_conv[0][0]']
ization)
conv2_block3_1_relu (Activatio (None, 64, 64, 64) 0 ['conv2_block3_1_bn[0][0]']
n)
conv2_block3_2_pad (ZeroPaddin (None, 66, 66, 64) 0 ['conv2_block3_1_relu[0][0]']
g2D)
conv2_block3_2_conv (Conv2D) (None, 32, 32, 64) 36864 ['conv2_block3_2_pad[0][0]']
conv2_block3_2_bn (BatchNormal (None, 32, 32, 64) 256 ['conv2_block3_2_conv[0][0]']
ization)
conv2_block3_2_relu (Activatio (None, 32, 32, 64) 0 ['conv2_block3_2_bn[0][0]']
n)
max_pooling2d (MaxPooling2D) (None, 32, 32, 256) 0 ['conv2_block2_out[0][0]']
conv2_block3_3_conv (Conv2D) (None, 32, 32, 256) 16640 ['conv2_block3_2_relu[0][0]']
conv2_block3_out (Add) (None, 32, 32, 256) 0 ['max_pooling2d[0][0]',
'conv2_block3_3_conv[0][0]']
conv3_block1_preact_bn (BatchN (None, 32, 32, 256) 1024 ['conv2_block3_out[0][0]']
ormalization)
conv3_block1_preact_relu (Acti (None, 32, 32, 256) 0 ['conv3_block1_preact_bn[0][0]']
vation)
conv3_block1_1_conv (Conv2D) (None, 32, 32, 128) 32768 ['conv3_block1_preact_relu[0][0]'
]
conv3_block1_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block1_1_conv[0][0]']
ization)
conv3_block1_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block1_1_bn[0][0]']
n)
conv3_block1_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block1_1_relu[0][0]']
g2D)
conv3_block1_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block1_2_pad[0][0]']
conv3_block1_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block1_2_conv[0][0]']
ization)
conv3_block1_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block1_2_bn[0][0]']
n)
conv3_block1_0_conv (Conv2D) (None, 32, 32, 512) 131584 ['conv3_block1_preact_relu[0][0]'
]
conv3_block1_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block1_2_relu[0][0]']
conv3_block1_out (Add) (None, 32, 32, 512) 0 ['conv3_block1_0_conv[0][0]',
'conv3_block1_3_conv[0][0]']
conv3_block2_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block1_out[0][0]']
ormalization)
conv3_block2_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block2_preact_bn[0][0]']
vation)
conv3_block2_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block2_preact_relu[0][0]'
]
conv3_block2_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block2_1_conv[0][0]']
ization)
conv3_block2_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block2_1_bn[0][0]']
n)
conv3_block2_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block2_1_relu[0][0]']
g2D)
conv3_block2_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block2_2_pad[0][0]']
conv3_block2_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block2_2_conv[0][0]']
ization)
conv3_block2_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block2_2_bn[0][0]']
n)
conv3_block2_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block2_2_relu[0][0]']
conv3_block2_out (Add) (None, 32, 32, 512) 0 ['conv3_block1_out[0][0]',
'conv3_block2_3_conv[0][0]']
conv3_block3_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block2_out[0][0]']
ormalization)
conv3_block3_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block3_preact_bn[0][0]']
vation)
conv3_block3_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block3_preact_relu[0][0]'
]
conv3_block3_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block3_1_conv[0][0]']
ization)
conv3_block3_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block3_1_bn[0][0]']
n)
conv3_block3_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block3_1_relu[0][0]']
g2D)
conv3_block3_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block3_2_pad[0][0]']
conv3_block3_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block3_2_conv[0][0]']
ization)
conv3_block3_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block3_2_bn[0][0]']
n)
conv3_block3_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block3_2_relu[0][0]']
conv3_block3_out (Add) (None, 32, 32, 512) 0 ['conv3_block2_out[0][0]',
'conv3_block3_3_conv[0][0]']
conv3_block4_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block3_out[0][0]']
ormalization)
conv3_block4_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block4_preact_bn[0][0]']
vation)
conv3_block4_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block4_preact_relu[0][0]'
]
conv3_block4_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block4_1_conv[0][0]']
ization)
conv3_block4_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block4_1_bn[0][0]']
n)
conv3_block4_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block4_1_relu[0][0]']
g2D)
conv3_block4_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block4_2_pad[0][0]']
conv3_block4_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block4_2_conv[0][0]']
ization)
conv3_block4_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block4_2_bn[0][0]']
n)
conv3_block4_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block4_2_relu[0][0]']
conv3_block4_out (Add) (None, 32, 32, 512) 0 ['conv3_block3_out[0][0]',
'conv3_block4_3_conv[0][0]']
conv3_block5_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block4_out[0][0]']
ormalization)
conv3_block5_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block5_preact_bn[0][0]']
vation)
conv3_block5_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block5_preact_relu[0][0]'
]
conv3_block5_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block5_1_conv[0][0]']
ization)
conv3_block5_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block5_1_bn[0][0]']
n)
conv3_block5_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block5_1_relu[0][0]']
g2D)
conv3_block5_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block5_2_pad[0][0]']
conv3_block5_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block5_2_conv[0][0]']
ization)
conv3_block5_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block5_2_bn[0][0]']
n)
conv3_block5_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block5_2_relu[0][0]']
conv3_block5_out (Add) (None, 32, 32, 512) 0 ['conv3_block4_out[0][0]',
'conv3_block5_3_conv[0][0]']
conv3_block6_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block5_out[0][0]']
ormalization)
conv3_block6_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block6_preact_bn[0][0]']
vation)
conv3_block6_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block6_preact_relu[0][0]'
]
conv3_block6_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block6_1_conv[0][0]']
ization)
conv3_block6_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block6_1_bn[0][0]']
n)
conv3_block6_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block6_1_relu[0][0]']
g2D)
conv3_block6_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block6_2_pad[0][0]']
conv3_block6_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block6_2_conv[0][0]']
ization)
conv3_block6_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block6_2_bn[0][0]']
n)
conv3_block6_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block6_2_relu[0][0]']
conv3_block6_out (Add) (None, 32, 32, 512) 0 ['conv3_block5_out[0][0]',
'conv3_block6_3_conv[0][0]']
conv3_block7_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block6_out[0][0]']
ormalization)
conv3_block7_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block7_preact_bn[0][0]']
vation)
conv3_block7_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block7_preact_relu[0][0]'
]
conv3_block7_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block7_1_conv[0][0]']
ization)
conv3_block7_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block7_1_bn[0][0]']
n)
conv3_block7_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block7_1_relu[0][0]']
g2D)
conv3_block7_2_conv (Conv2D) (None, 32, 32, 128) 147456 ['conv3_block7_2_pad[0][0]']
conv3_block7_2_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block7_2_conv[0][0]']
ization)
conv3_block7_2_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block7_2_bn[0][0]']
n)
conv3_block7_3_conv (Conv2D) (None, 32, 32, 512) 66048 ['conv3_block7_2_relu[0][0]']
conv3_block7_out (Add) (None, 32, 32, 512) 0 ['conv3_block6_out[0][0]',
'conv3_block7_3_conv[0][0]']
conv3_block8_preact_bn (BatchN (None, 32, 32, 512) 2048 ['conv3_block7_out[0][0]']
ormalization)
conv3_block8_preact_relu (Acti (None, 32, 32, 512) 0 ['conv3_block8_preact_bn[0][0]']
vation)
conv3_block8_1_conv (Conv2D) (None, 32, 32, 128) 65536 ['conv3_block8_preact_relu[0][0]'
]
conv3_block8_1_bn (BatchNormal (None, 32, 32, 128) 512 ['conv3_block8_1_conv[0][0]']
ization)
conv3_block8_1_relu (Activatio (None, 32, 32, 128) 0 ['conv3_block8_1_bn[0][0]']
n)
conv3_block8_2_pad (ZeroPaddin (None, 34, 34, 128) 0 ['conv3_block8_1_relu[0][0]']
g2D)
conv3_block8_2_conv (Conv2D) (None, 16, 16, 128) 147456 ['conv3_block8_2_pad[0][0]']
conv3_block8_2_bn (BatchNormal (None, 16, 16, 128) 512 ['conv3_block8_2_conv[0][0]']
ization)
conv3_block8_2_relu (Activatio (None, 16, 16, 128) 0 ['conv3_block8_2_bn[0][0]']
n)
max_pooling2d_1 (MaxPooling2D) (None, 16, 16, 512) 0 ['conv3_block7_out[0][0]']
conv3_block8_3_conv (Conv2D) (None, 16, 16, 512) 66048 ['conv3_block8_2_relu[0][0]']
conv3_block8_out (Add) (None, 16, 16, 512) 0 ['max_pooling2d_1[0][0]',
'conv3_block8_3_conv[0][0]']
conv4_block1_preact_bn (BatchN (None, 16, 16, 512) 2048 ['conv3_block8_out[0][0]']
ormalization)
conv4_block1_preact_relu (Acti (None, 16, 16, 512) 0 ['conv4_block1_preact_bn[0][0]']
vation)
conv4_block1_1_conv (Conv2D) (None, 16, 16, 256) 131072 ['conv4_block1_preact_relu[0][0]'
]
conv4_block1_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block1_1_conv[0][0]']
ization)
conv4_block1_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block1_1_bn[0][0]']
n)
conv4_block1_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block1_1_relu[0][0]']
g2D)
conv4_block1_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block1_2_pad[0][0]']
conv4_block1_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block1_2_conv[0][0]']
ization)
conv4_block1_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block1_2_bn[0][0]']
n)
conv4_block1_0_conv (Conv2D) (None, 16, 16, 1024 525312 ['conv4_block1_preact_relu[0][0]'
) ]
conv4_block1_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block1_2_relu[0][0]']
)
conv4_block1_out (Add) (None, 16, 16, 1024 0 ['conv4_block1_0_conv[0][0]',
) 'conv4_block1_3_conv[0][0]']
conv4_block2_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block1_out[0][0]']
ormalization) )
conv4_block2_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block2_preact_bn[0][0]']
vation) )
conv4_block2_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block2_preact_relu[0][0]'
]
conv4_block2_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block2_1_conv[0][0]']
ization)
conv4_block2_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block2_1_bn[0][0]']
n)
conv4_block2_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block2_1_relu[0][0]']
g2D)
conv4_block2_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block2_2_pad[0][0]']
conv4_block2_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block2_2_conv[0][0]']
ization)
conv4_block2_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block2_2_bn[0][0]']
n)
conv4_block2_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block2_2_relu[0][0]']
)
conv4_block2_out (Add) (None, 16, 16, 1024 0 ['conv4_block1_out[0][0]',
) 'conv4_block2_3_conv[0][0]']
conv4_block3_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block2_out[0][0]']
ormalization) )
conv4_block3_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block3_preact_bn[0][0]']
vation) )
conv4_block3_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block3_preact_relu[0][0]'
]
conv4_block3_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block3_1_conv[0][0]']
ization)
conv4_block3_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block3_1_bn[0][0]']
n)
conv4_block3_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block3_1_relu[0][0]']
g2D)
conv4_block3_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block3_2_pad[0][0]']
conv4_block3_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block3_2_conv[0][0]']
ization)
conv4_block3_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block3_2_bn[0][0]']
n)
conv4_block3_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block3_2_relu[0][0]']
)
conv4_block3_out (Add) (None, 16, 16, 1024 0 ['conv4_block2_out[0][0]',
) 'conv4_block3_3_conv[0][0]']
conv4_block4_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block3_out[0][0]']
ormalization) )
conv4_block4_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block4_preact_bn[0][0]']
vation) )
conv4_block4_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block4_preact_relu[0][0]'
]
conv4_block4_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block4_1_conv[0][0]']
ization)
conv4_block4_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block4_1_bn[0][0]']
n)
conv4_block4_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block4_1_relu[0][0]']
g2D)
conv4_block4_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block4_2_pad[0][0]']
conv4_block4_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block4_2_conv[0][0]']
ization)
conv4_block4_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block4_2_bn[0][0]']
n)
conv4_block4_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block4_2_relu[0][0]']
)
conv4_block4_out (Add) (None, 16, 16, 1024 0 ['conv4_block3_out[0][0]',
) 'conv4_block4_3_conv[0][0]']
conv4_block5_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block4_out[0][0]']
ormalization) )
conv4_block5_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block5_preact_bn[0][0]']
vation) )
conv4_block5_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block5_preact_relu[0][0]'
]
conv4_block5_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block5_1_conv[0][0]']
ization)
conv4_block5_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block5_1_bn[0][0]']
n)
conv4_block5_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block5_1_relu[0][0]']
g2D)
conv4_block5_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block5_2_pad[0][0]']
conv4_block5_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block5_2_conv[0][0]']
ization)
conv4_block5_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block5_2_bn[0][0]']
n)
conv4_block5_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block5_2_relu[0][0]']
)
conv4_block5_out (Add) (None, 16, 16, 1024 0 ['conv4_block4_out[0][0]',
) 'conv4_block5_3_conv[0][0]']
conv4_block6_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block5_out[0][0]']
ormalization) )
conv4_block6_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block6_preact_bn[0][0]']
vation) )
conv4_block6_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block6_preact_relu[0][0]'
]
conv4_block6_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block6_1_conv[0][0]']
ization)
conv4_block6_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block6_1_bn[0][0]']
n)
conv4_block6_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block6_1_relu[0][0]']
g2D)
conv4_block6_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block6_2_pad[0][0]']
conv4_block6_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block6_2_conv[0][0]']
ization)
conv4_block6_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block6_2_bn[0][0]']
n)
conv4_block6_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block6_2_relu[0][0]']
)
conv4_block6_out (Add) (None, 16, 16, 1024 0 ['conv4_block5_out[0][0]',
) 'conv4_block6_3_conv[0][0]']
conv4_block7_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block6_out[0][0]']
ormalization) )
conv4_block7_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block7_preact_bn[0][0]']
vation) )
conv4_block7_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block7_preact_relu[0][0]'
]
conv4_block7_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block7_1_conv[0][0]']
ization)
conv4_block7_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block7_1_bn[0][0]']
n)
conv4_block7_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block7_1_relu[0][0]']
g2D)
conv4_block7_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block7_2_pad[0][0]']
conv4_block7_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block7_2_conv[0][0]']
ization)
conv4_block7_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block7_2_bn[0][0]']
n)
conv4_block7_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block7_2_relu[0][0]']
)
conv4_block7_out (Add) (None, 16, 16, 1024 0 ['conv4_block6_out[0][0]',
) 'conv4_block7_3_conv[0][0]']
conv4_block8_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block7_out[0][0]']
ormalization) )
conv4_block8_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block8_preact_bn[0][0]']
vation) )
conv4_block8_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block8_preact_relu[0][0]'
]
conv4_block8_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block8_1_conv[0][0]']
ization)
conv4_block8_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block8_1_bn[0][0]']
n)
conv4_block8_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block8_1_relu[0][0]']
g2D)
conv4_block8_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block8_2_pad[0][0]']
conv4_block8_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block8_2_conv[0][0]']
ization)
conv4_block8_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block8_2_bn[0][0]']
n)
conv4_block8_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block8_2_relu[0][0]']
)
conv4_block8_out (Add) (None, 16, 16, 1024 0 ['conv4_block7_out[0][0]',
) 'conv4_block8_3_conv[0][0]']
conv4_block9_preact_bn (BatchN (None, 16, 16, 1024 4096 ['conv4_block8_out[0][0]']
ormalization) )
conv4_block9_preact_relu (Acti (None, 16, 16, 1024 0 ['conv4_block9_preact_bn[0][0]']
vation) )
conv4_block9_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block9_preact_relu[0][0]'
]
conv4_block9_1_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block9_1_conv[0][0]']
ization)
conv4_block9_1_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block9_1_bn[0][0]']
n)
conv4_block9_2_pad (ZeroPaddin (None, 18, 18, 256) 0 ['conv4_block9_1_relu[0][0]']
g2D)
conv4_block9_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block9_2_pad[0][0]']
conv4_block9_2_bn (BatchNormal (None, 16, 16, 256) 1024 ['conv4_block9_2_conv[0][0]']
ization)
conv4_block9_2_relu (Activatio (None, 16, 16, 256) 0 ['conv4_block9_2_bn[0][0]']
n)
conv4_block9_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block9_2_relu[0][0]']
)
conv4_block9_out (Add) (None, 16, 16, 1024 0 ['conv4_block8_out[0][0]',
) 'conv4_block9_3_conv[0][0]']
conv4_block10_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block9_out[0][0]']
Normalization) )
conv4_block10_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block10_preact_bn[0][0]']
ivation) )
conv4_block10_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block10_preact_relu[0][0]
']
conv4_block10_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block10_1_conv[0][0]']
lization)
conv4_block10_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block10_1_bn[0][0]']
on)
conv4_block10_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block10_1_relu[0][0]']
ng2D)
conv4_block10_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block10_2_pad[0][0]']
conv4_block10_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block10_2_conv[0][0]']
lization)
conv4_block10_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block10_2_bn[0][0]']
on)
conv4_block10_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block10_2_relu[0][0]']
)
conv4_block10_out (Add) (None, 16, 16, 1024 0 ['conv4_block9_out[0][0]',
) 'conv4_block10_3_conv[0][0]']
conv4_block11_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block10_out[0][0]']
Normalization) )
conv4_block11_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block11_preact_bn[0][0]']
ivation) )
conv4_block11_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block11_preact_relu[0][0]
']
conv4_block11_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block11_1_conv[0][0]']
lization)
conv4_block11_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block11_1_bn[0][0]']
on)
conv4_block11_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block11_1_relu[0][0]']
ng2D)
conv4_block11_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block11_2_pad[0][0]']
conv4_block11_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block11_2_conv[0][0]']
lization)
conv4_block11_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block11_2_bn[0][0]']
on)
conv4_block11_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block11_2_relu[0][0]']
)
conv4_block11_out (Add) (None, 16, 16, 1024 0 ['conv4_block10_out[0][0]',
) 'conv4_block11_3_conv[0][0]']
conv4_block12_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block11_out[0][0]']
Normalization) )
conv4_block12_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block12_preact_bn[0][0]']
ivation) )
conv4_block12_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block12_preact_relu[0][0]
']
conv4_block12_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block12_1_conv[0][0]']
lization)
conv4_block12_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block12_1_bn[0][0]']
on)
conv4_block12_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block12_1_relu[0][0]']
ng2D)
conv4_block12_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block12_2_pad[0][0]']
conv4_block12_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block12_2_conv[0][0]']
lization)
conv4_block12_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block12_2_bn[0][0]']
on)
conv4_block12_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block12_2_relu[0][0]']
)
conv4_block12_out (Add) (None, 16, 16, 1024 0 ['conv4_block11_out[0][0]',
) 'conv4_block12_3_conv[0][0]']
conv4_block13_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block12_out[0][0]']
Normalization) )
conv4_block13_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block13_preact_bn[0][0]']
ivation) )
conv4_block13_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block13_preact_relu[0][0]
']
conv4_block13_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block13_1_conv[0][0]']
lization)
conv4_block13_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block13_1_bn[0][0]']
on)
conv4_block13_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block13_1_relu[0][0]']
ng2D)
conv4_block13_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block13_2_pad[0][0]']
conv4_block13_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block13_2_conv[0][0]']
lization)
conv4_block13_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block13_2_bn[0][0]']
on)
conv4_block13_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block13_2_relu[0][0]']
)
conv4_block13_out (Add) (None, 16, 16, 1024 0 ['conv4_block12_out[0][0]',
) 'conv4_block13_3_conv[0][0]']
conv4_block14_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block13_out[0][0]']
Normalization) )
conv4_block14_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block14_preact_bn[0][0]']
ivation) )
conv4_block14_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block14_preact_relu[0][0]
']
conv4_block14_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block14_1_conv[0][0]']
lization)
conv4_block14_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block14_1_bn[0][0]']
on)
conv4_block14_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block14_1_relu[0][0]']
ng2D)
conv4_block14_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block14_2_pad[0][0]']
conv4_block14_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block14_2_conv[0][0]']
lization)
conv4_block14_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block14_2_bn[0][0]']
on)
conv4_block14_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block14_2_relu[0][0]']
)
conv4_block14_out (Add) (None, 16, 16, 1024 0 ['conv4_block13_out[0][0]',
) 'conv4_block14_3_conv[0][0]']
conv4_block15_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block14_out[0][0]']
Normalization) )
conv4_block15_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block15_preact_bn[0][0]']
ivation) )
conv4_block15_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block15_preact_relu[0][0]
']
conv4_block15_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block15_1_conv[0][0]']
lization)
conv4_block15_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block15_1_bn[0][0]']
on)
conv4_block15_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block15_1_relu[0][0]']
ng2D)
conv4_block15_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block15_2_pad[0][0]']
conv4_block15_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block15_2_conv[0][0]']
lization)
conv4_block15_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block15_2_bn[0][0]']
on)
conv4_block15_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block15_2_relu[0][0]']
)
conv4_block15_out (Add) (None, 16, 16, 1024 0 ['conv4_block14_out[0][0]',
) 'conv4_block15_3_conv[0][0]']
conv4_block16_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block15_out[0][0]']
Normalization) )
conv4_block16_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block16_preact_bn[0][0]']
ivation) )
conv4_block16_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block16_preact_relu[0][0]
']
conv4_block16_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block16_1_conv[0][0]']
lization)
conv4_block16_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block16_1_bn[0][0]']
on)
conv4_block16_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block16_1_relu[0][0]']
ng2D)
conv4_block16_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block16_2_pad[0][0]']
conv4_block16_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block16_2_conv[0][0]']
lization)
conv4_block16_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block16_2_bn[0][0]']
on)
conv4_block16_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block16_2_relu[0][0]']
)
conv4_block16_out (Add) (None, 16, 16, 1024 0 ['conv4_block15_out[0][0]',
) 'conv4_block16_3_conv[0][0]']
conv4_block17_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block16_out[0][0]']
Normalization) )
conv4_block17_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block17_preact_bn[0][0]']
ivation) )
conv4_block17_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block17_preact_relu[0][0]
']
conv4_block17_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block17_1_conv[0][0]']
lization)
conv4_block17_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block17_1_bn[0][0]']
on)
conv4_block17_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block17_1_relu[0][0]']
ng2D)
conv4_block17_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block17_2_pad[0][0]']
conv4_block17_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block17_2_conv[0][0]']
lization)
conv4_block17_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block17_2_bn[0][0]']
on)
conv4_block17_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block17_2_relu[0][0]']
)
conv4_block17_out (Add) (None, 16, 16, 1024 0 ['conv4_block16_out[0][0]',
) 'conv4_block17_3_conv[0][0]']
conv4_block18_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block17_out[0][0]']
Normalization) )
conv4_block18_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block18_preact_bn[0][0]']
ivation) )
conv4_block18_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block18_preact_relu[0][0]
']
conv4_block18_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block18_1_conv[0][0]']
lization)
conv4_block18_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block18_1_bn[0][0]']
on)
conv4_block18_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block18_1_relu[0][0]']
ng2D)
conv4_block18_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block18_2_pad[0][0]']
conv4_block18_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block18_2_conv[0][0]']
lization)
conv4_block18_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block18_2_bn[0][0]']
on)
conv4_block18_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block18_2_relu[0][0]']
)
conv4_block18_out (Add) (None, 16, 16, 1024 0 ['conv4_block17_out[0][0]',
) 'conv4_block18_3_conv[0][0]']
conv4_block19_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block18_out[0][0]']
Normalization) )
conv4_block19_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block19_preact_bn[0][0]']
ivation) )
conv4_block19_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block19_preact_relu[0][0]
']
conv4_block19_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block19_1_conv[0][0]']
lization)
conv4_block19_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block19_1_bn[0][0]']
on)
conv4_block19_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block19_1_relu[0][0]']
ng2D)
conv4_block19_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block19_2_pad[0][0]']
conv4_block19_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block19_2_conv[0][0]']
lization)
conv4_block19_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block19_2_bn[0][0]']
on)
conv4_block19_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block19_2_relu[0][0]']
)
conv4_block19_out (Add) (None, 16, 16, 1024 0 ['conv4_block18_out[0][0]',
) 'conv4_block19_3_conv[0][0]']
conv4_block20_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block19_out[0][0]']
Normalization) )
conv4_block20_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block20_preact_bn[0][0]']
ivation) )
conv4_block20_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block20_preact_relu[0][0]
']
conv4_block20_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block20_1_conv[0][0]']
lization)
conv4_block20_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block20_1_bn[0][0]']
on)
conv4_block20_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block20_1_relu[0][0]']
ng2D)
conv4_block20_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block20_2_pad[0][0]']
conv4_block20_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block20_2_conv[0][0]']
lization)
conv4_block20_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block20_2_bn[0][0]']
on)
conv4_block20_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block20_2_relu[0][0]']
)
conv4_block20_out (Add) (None, 16, 16, 1024 0 ['conv4_block19_out[0][0]',
) 'conv4_block20_3_conv[0][0]']
conv4_block21_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block20_out[0][0]']
Normalization) )
conv4_block21_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block21_preact_bn[0][0]']
ivation) )
conv4_block21_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block21_preact_relu[0][0]
']
conv4_block21_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block21_1_conv[0][0]']
lization)
conv4_block21_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block21_1_bn[0][0]']
on)
conv4_block21_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block21_1_relu[0][0]']
ng2D)
conv4_block21_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block21_2_pad[0][0]']
conv4_block21_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block21_2_conv[0][0]']
lization)
conv4_block21_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block21_2_bn[0][0]']
on)
conv4_block21_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block21_2_relu[0][0]']
)
conv4_block21_out (Add) (None, 16, 16, 1024 0 ['conv4_block20_out[0][0]',
) 'conv4_block21_3_conv[0][0]']
conv4_block22_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block21_out[0][0]']
Normalization) )
conv4_block22_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block22_preact_bn[0][0]']
ivation) )
conv4_block22_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block22_preact_relu[0][0]
']
conv4_block22_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block22_1_conv[0][0]']
lization)
conv4_block22_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block22_1_bn[0][0]']
on)
conv4_block22_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block22_1_relu[0][0]']
ng2D)
conv4_block22_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block22_2_pad[0][0]']
conv4_block22_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block22_2_conv[0][0]']
lization)
conv4_block22_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block22_2_bn[0][0]']
on)
conv4_block22_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block22_2_relu[0][0]']
)
conv4_block22_out (Add) (None, 16, 16, 1024 0 ['conv4_block21_out[0][0]',
) 'conv4_block22_3_conv[0][0]']
conv4_block23_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block22_out[0][0]']
Normalization) )
conv4_block23_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block23_preact_bn[0][0]']
ivation) )
conv4_block23_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block23_preact_relu[0][0]
']
conv4_block23_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block23_1_conv[0][0]']
lization)
conv4_block23_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block23_1_bn[0][0]']
on)
conv4_block23_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block23_1_relu[0][0]']
ng2D)
conv4_block23_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block23_2_pad[0][0]']
conv4_block23_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block23_2_conv[0][0]']
lization)
conv4_block23_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block23_2_bn[0][0]']
on)
conv4_block23_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block23_2_relu[0][0]']
)
conv4_block23_out (Add) (None, 16, 16, 1024 0 ['conv4_block22_out[0][0]',
) 'conv4_block23_3_conv[0][0]']
conv4_block24_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block23_out[0][0]']
Normalization) )
conv4_block24_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block24_preact_bn[0][0]']
ivation) )
conv4_block24_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block24_preact_relu[0][0]
']
conv4_block24_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block24_1_conv[0][0]']
lization)
conv4_block24_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block24_1_bn[0][0]']
on)
conv4_block24_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block24_1_relu[0][0]']
ng2D)
conv4_block24_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block24_2_pad[0][0]']
conv4_block24_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block24_2_conv[0][0]']
lization)
conv4_block24_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block24_2_bn[0][0]']
on)
conv4_block24_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block24_2_relu[0][0]']
)
conv4_block24_out (Add) (None, 16, 16, 1024 0 ['conv4_block23_out[0][0]',
) 'conv4_block24_3_conv[0][0]']
conv4_block25_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block24_out[0][0]']
Normalization) )
conv4_block25_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block25_preact_bn[0][0]']
ivation) )
conv4_block25_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block25_preact_relu[0][0]
']
conv4_block25_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block25_1_conv[0][0]']
lization)
conv4_block25_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block25_1_bn[0][0]']
on)
conv4_block25_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block25_1_relu[0][0]']
ng2D)
conv4_block25_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block25_2_pad[0][0]']
conv4_block25_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block25_2_conv[0][0]']
lization)
conv4_block25_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block25_2_bn[0][0]']
on)
conv4_block25_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block25_2_relu[0][0]']
)
conv4_block25_out (Add) (None, 16, 16, 1024 0 ['conv4_block24_out[0][0]',
) 'conv4_block25_3_conv[0][0]']
conv4_block26_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block25_out[0][0]']
Normalization) )
conv4_block26_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block26_preact_bn[0][0]']
ivation) )
conv4_block26_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block26_preact_relu[0][0]
']
conv4_block26_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block26_1_conv[0][0]']
lization)
conv4_block26_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block26_1_bn[0][0]']
on)
conv4_block26_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block26_1_relu[0][0]']
ng2D)
conv4_block26_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block26_2_pad[0][0]']
conv4_block26_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block26_2_conv[0][0]']
lization)
conv4_block26_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block26_2_bn[0][0]']
on)
conv4_block26_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block26_2_relu[0][0]']
)
conv4_block26_out (Add) (None, 16, 16, 1024 0 ['conv4_block25_out[0][0]',
) 'conv4_block26_3_conv[0][0]']
conv4_block27_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block26_out[0][0]']
Normalization) )
conv4_block27_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block27_preact_bn[0][0]']
ivation) )
conv4_block27_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block27_preact_relu[0][0]
']
conv4_block27_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block27_1_conv[0][0]']
lization)
conv4_block27_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block27_1_bn[0][0]']
on)
conv4_block27_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block27_1_relu[0][0]']
ng2D)
conv4_block27_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block27_2_pad[0][0]']
conv4_block27_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block27_2_conv[0][0]']
lization)
conv4_block27_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block27_2_bn[0][0]']
on)
conv4_block27_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block27_2_relu[0][0]']
)
conv4_block27_out (Add) (None, 16, 16, 1024 0 ['conv4_block26_out[0][0]',
) 'conv4_block27_3_conv[0][0]']
conv4_block28_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block27_out[0][0]']
Normalization) )
conv4_block28_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block28_preact_bn[0][0]']
ivation) )
conv4_block28_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block28_preact_relu[0][0]
']
conv4_block28_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block28_1_conv[0][0]']
lization)
conv4_block28_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block28_1_bn[0][0]']
on)
conv4_block28_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block28_1_relu[0][0]']
ng2D)
conv4_block28_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block28_2_pad[0][0]']
conv4_block28_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block28_2_conv[0][0]']
lization)
conv4_block28_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block28_2_bn[0][0]']
on)
conv4_block28_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block28_2_relu[0][0]']
)
conv4_block28_out (Add) (None, 16, 16, 1024 0 ['conv4_block27_out[0][0]',
) 'conv4_block28_3_conv[0][0]']
conv4_block29_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block28_out[0][0]']
Normalization) )
conv4_block29_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block29_preact_bn[0][0]']
ivation) )
conv4_block29_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block29_preact_relu[0][0]
']
conv4_block29_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block29_1_conv[0][0]']
lization)
conv4_block29_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block29_1_bn[0][0]']
on)
conv4_block29_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block29_1_relu[0][0]']
ng2D)
conv4_block29_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block29_2_pad[0][0]']
conv4_block29_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block29_2_conv[0][0]']
lization)
conv4_block29_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block29_2_bn[0][0]']
on)
conv4_block29_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block29_2_relu[0][0]']
)
conv4_block29_out (Add) (None, 16, 16, 1024 0 ['conv4_block28_out[0][0]',
) 'conv4_block29_3_conv[0][0]']
conv4_block30_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block29_out[0][0]']
Normalization) )
conv4_block30_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block30_preact_bn[0][0]']
ivation) )
conv4_block30_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block30_preact_relu[0][0]
']
conv4_block30_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block30_1_conv[0][0]']
lization)
conv4_block30_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block30_1_bn[0][0]']
on)
conv4_block30_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block30_1_relu[0][0]']
ng2D)
conv4_block30_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block30_2_pad[0][0]']
conv4_block30_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block30_2_conv[0][0]']
lization)
conv4_block30_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block30_2_bn[0][0]']
on)
conv4_block30_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block30_2_relu[0][0]']
)
conv4_block30_out (Add) (None, 16, 16, 1024 0 ['conv4_block29_out[0][0]',
) 'conv4_block30_3_conv[0][0]']
conv4_block31_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block30_out[0][0]']
Normalization) )
conv4_block31_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block31_preact_bn[0][0]']
ivation) )
conv4_block31_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block31_preact_relu[0][0]
']
conv4_block31_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block31_1_conv[0][0]']
lization)
conv4_block31_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block31_1_bn[0][0]']
on)
conv4_block31_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block31_1_relu[0][0]']
ng2D)
conv4_block31_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block31_2_pad[0][0]']
conv4_block31_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block31_2_conv[0][0]']
lization)
conv4_block31_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block31_2_bn[0][0]']
on)
conv4_block31_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block31_2_relu[0][0]']
)
conv4_block31_out (Add) (None, 16, 16, 1024 0 ['conv4_block30_out[0][0]',
) 'conv4_block31_3_conv[0][0]']
conv4_block32_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block31_out[0][0]']
Normalization) )
conv4_block32_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block32_preact_bn[0][0]']
ivation) )
conv4_block32_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block32_preact_relu[0][0]
']
conv4_block32_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block32_1_conv[0][0]']
lization)
conv4_block32_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block32_1_bn[0][0]']
on)
conv4_block32_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block32_1_relu[0][0]']
ng2D)
conv4_block32_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block32_2_pad[0][0]']
conv4_block32_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block32_2_conv[0][0]']
lization)
conv4_block32_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block32_2_bn[0][0]']
on)
conv4_block32_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block32_2_relu[0][0]']
)
conv4_block32_out (Add) (None, 16, 16, 1024 0 ['conv4_block31_out[0][0]',
) 'conv4_block32_3_conv[0][0]']
conv4_block33_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block32_out[0][0]']
Normalization) )
conv4_block33_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block33_preact_bn[0][0]']
ivation) )
conv4_block33_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block33_preact_relu[0][0]
']
conv4_block33_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block33_1_conv[0][0]']
lization)
conv4_block33_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block33_1_bn[0][0]']
on)
conv4_block33_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block33_1_relu[0][0]']
ng2D)
conv4_block33_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block33_2_pad[0][0]']
conv4_block33_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block33_2_conv[0][0]']
lization)
conv4_block33_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block33_2_bn[0][0]']
on)
conv4_block33_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block33_2_relu[0][0]']
)
conv4_block33_out (Add) (None, 16, 16, 1024 0 ['conv4_block32_out[0][0]',
) 'conv4_block33_3_conv[0][0]']
conv4_block34_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block33_out[0][0]']
Normalization) )
conv4_block34_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block34_preact_bn[0][0]']
ivation) )
conv4_block34_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block34_preact_relu[0][0]
']
conv4_block34_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block34_1_conv[0][0]']
lization)
conv4_block34_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block34_1_bn[0][0]']
on)
conv4_block34_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block34_1_relu[0][0]']
ng2D)
conv4_block34_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block34_2_pad[0][0]']
conv4_block34_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block34_2_conv[0][0]']
lization)
conv4_block34_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block34_2_bn[0][0]']
on)
conv4_block34_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block34_2_relu[0][0]']
)
conv4_block34_out (Add) (None, 16, 16, 1024 0 ['conv4_block33_out[0][0]',
) 'conv4_block34_3_conv[0][0]']
conv4_block35_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block34_out[0][0]']
Normalization) )
conv4_block35_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block35_preact_bn[0][0]']
ivation) )
conv4_block35_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block35_preact_relu[0][0]
']
conv4_block35_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block35_1_conv[0][0]']
lization)
conv4_block35_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block35_1_bn[0][0]']
on)
conv4_block35_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block35_1_relu[0][0]']
ng2D)
conv4_block35_2_conv (Conv2D) (None, 16, 16, 256) 589824 ['conv4_block35_2_pad[0][0]']
conv4_block35_2_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block35_2_conv[0][0]']
lization)
conv4_block35_2_relu (Activati (None, 16, 16, 256) 0 ['conv4_block35_2_bn[0][0]']
on)
conv4_block35_3_conv (Conv2D) (None, 16, 16, 1024 263168 ['conv4_block35_2_relu[0][0]']
)
conv4_block35_out (Add) (None, 16, 16, 1024 0 ['conv4_block34_out[0][0]',
) 'conv4_block35_3_conv[0][0]']
conv4_block36_preact_bn (Batch (None, 16, 16, 1024 4096 ['conv4_block35_out[0][0]']
Normalization) )
conv4_block36_preact_relu (Act (None, 16, 16, 1024 0 ['conv4_block36_preact_bn[0][0]']
ivation) )
conv4_block36_1_conv (Conv2D) (None, 16, 16, 256) 262144 ['conv4_block36_preact_relu[0][0]
']
conv4_block36_1_bn (BatchNorma (None, 16, 16, 256) 1024 ['conv4_block36_1_conv[0][0]']
lization)
conv4_block36_1_relu (Activati (None, 16, 16, 256) 0 ['conv4_block36_1_bn[0][0]']
on)
conv4_block36_2_pad (ZeroPaddi (None, 18, 18, 256) 0 ['conv4_block36_1_relu[0][0]']
ng2D)
conv4_block36_2_conv (Conv2D) (None, 8, 8, 256) 589824 ['conv4_block36_2_pad[0][0]']
conv4_block36_2_bn (BatchNorma (None, 8, 8, 256) 1024 ['conv4_block36_2_conv[0][0]']
lization)
conv4_block36_2_relu (Activati (None, 8, 8, 256) 0 ['conv4_block36_2_bn[0][0]']
on)
max_pooling2d_2 (MaxPooling2D) (None, 8, 8, 1024) 0 ['conv4_block35_out[0][0]']
conv4_block36_3_conv (Conv2D) (None, 8, 8, 1024) 263168 ['conv4_block36_2_relu[0][0]']
conv4_block36_out (Add) (None, 8, 8, 1024) 0 ['max_pooling2d_2[0][0]',
'conv4_block36_3_conv[0][0]']
conv5_block1_preact_bn (BatchN (None, 8, 8, 1024) 4096 ['conv4_block36_out[0][0]']
ormalization)
conv5_block1_preact_relu (Acti (None, 8, 8, 1024) 0 ['conv5_block1_preact_bn[0][0]']
vation)
conv5_block1_1_conv (Conv2D) (None, 8, 8, 512) 524288 ['conv5_block1_preact_relu[0][0]'
]
conv5_block1_1_bn (BatchNormal (None, 8, 8, 512) 2048 ['conv5_block1_1_conv[0][0]']
ization)
conv5_block1_1_relu (Activatio (None, 8, 8, 512) 0 ['conv5_block1_1_bn[0][0]']
n)
conv5_block1_2_pad (ZeroPaddin (None, 10, 10, 512) 0 ['conv5_block1_1_relu[0][0]']
g2D)
conv5_block1_2_conv (Conv2D) (None, 8, 8, 512) 2359296 ['conv5_block1_2_pad[0][0]']
conv5_block1_2_bn (BatchNormal (None, 8, 8, 512) 2048 ['conv5_block1_2_conv[0][0]']
ization)
conv5_block1_2_relu (Activatio (None, 8, 8, 512) 0 ['conv5_block1_2_bn[0][0]']
n)
conv5_block1_0_conv (Conv2D) (None, 8, 8, 2048) 2099200 ['conv5_block1_preact_relu[0][0]'
]
conv5_block1_3_conv (Conv2D) (None, 8, 8, 2048) 1050624 ['conv5_block1_2_relu[0][0]']
conv5_block1_out (Add) (None, 8, 8, 2048) 0 ['conv5_block1_0_conv[0][0]',
'conv5_block1_3_conv[0][0]']
conv5_block2_preact_bn (BatchN (None, 8, 8, 2048) 8192 ['conv5_block1_out[0][0]']
ormalization)
conv5_block2_preact_relu (Acti (None, 8, 8, 2048) 0 ['conv5_block2_preact_bn[0][0]']
vation)
conv5_block2_1_conv (Conv2D) (None, 8, 8, 512) 1048576 ['conv5_block2_preact_relu[0][0]'
]
conv5_block2_1_bn (BatchNormal (None, 8, 8, 512) 2048 ['conv5_block2_1_conv[0][0]']
ization)
conv5_block2_1_relu (Activatio (None, 8, 8, 512) 0 ['conv5_block2_1_bn[0][0]']
n)
conv5_block2_2_pad (ZeroPaddin (None, 10, 10, 512) 0 ['conv5_block2_1_relu[0][0]']
g2D)
conv5_block2_2_conv (Conv2D) (None, 8, 8, 512) 2359296 ['conv5_block2_2_pad[0][0]']
conv5_block2_2_bn (BatchNormal (None, 8, 8, 512) 2048 ['conv5_block2_2_conv[0][0]']
ization)
conv5_block2_2_relu (Activatio (None, 8, 8, 512) 0 ['conv5_block2_2_bn[0][0]']
n)
conv5_block2_3_conv (Conv2D) (None, 8, 8, 2048) 1050624 ['conv5_block2_2_relu[0][0]']
conv5_block2_out (Add) (None, 8, 8, 2048) 0 ['conv5_block1_out[0][0]',
'conv5_block2_3_conv[0][0]']
conv5_block3_preact_bn (BatchN (None, 8, 8, 2048) 8192 ['conv5_block2_out[0][0]']
ormalization)
conv5_block3_preact_relu (Acti (None, 8, 8, 2048) 0 ['conv5_block3_preact_bn[0][0]']
vation)
conv5_block3_1_conv (Conv2D) (None, 8, 8, 512) 1048576 ['conv5_block3_preact_relu[0][0]'
]
conv5_block3_1_bn (BatchNormal (None, 8, 8, 512) 2048 ['conv5_block3_1_conv[0][0]']
ization)
conv5_block3_1_relu (Activatio (None, 8, 8, 512) 0 ['conv5_block3_1_bn[0][0]']
n)
conv5_block3_2_pad (ZeroPaddin (None, 10, 10, 512) 0 ['conv5_block3_1_relu[0][0]']
g2D)
conv5_block3_2_conv (Conv2D) (None, 8, 8, 512) 2359296 ['conv5_block3_2_pad[0][0]']
conv5_block3_2_bn (BatchNormal (None, 8, 8, 512) 2048 ['conv5_block3_2_conv[0][0]']
ization)
conv5_block3_2_relu (Activatio (None, 8, 8, 512) 0 ['conv5_block3_2_bn[0][0]']
n)
conv5_block3_3_conv (Conv2D) (None, 8, 8, 2048) 1050624 ['conv5_block3_2_relu[0][0]']
conv5_block3_out (Add) (None, 8, 8, 2048) 0 ['conv5_block2_out[0][0]',
'conv5_block3_3_conv[0][0]']
post_bn (BatchNormalization) (None, 8, 8, 2048) 8192 ['conv5_block3_out[0][0]']
post_relu (Activation) (None, 8, 8, 2048) 0 ['post_bn[0][0]']
global_average_pooling2d (Glob (None, 2048) 0 ['post_relu[0][0]']
alAveragePooling2D)
dense (Dense) (None, 1000) 2049000 ['global_average_pooling2d[0][0]'
]
dense_1 (Dense) (None, 10) 10010 ['dense[0][0]']
==================================================================================================
Total params: 60,390,658
Trainable params: 56,430,338
Non-trainable params: 3,960,320
__________________________________________________________________________________________________
# Model training
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics='accuracy')
model.fit(train, batch_size=32, epochs=5, validation_data=test)
Epoch 1/5 250/250 [==============================] - 6429s 26s/step - loss: 0.5649 - accuracy: 0.8292 - val_loss: 0.2556 - val_accuracy: 0.9155 Epoch 2/5 250/250 [==============================] - 199s 796ms/step - loss: 0.0687 - accuracy: 0.9824 - val_loss: 0.1668 - val_accuracy: 0.9460 Epoch 3/5 250/250 [==============================] - 209s 836ms/step - loss: 0.0216 - accuracy: 0.9958 - val_loss: 0.1762 - val_accuracy: 0.9485 Epoch 4/5 250/250 [==============================] - 204s 815ms/step - loss: 0.0135 - accuracy: 0.9974 - val_loss: 0.1525 - val_accuracy: 0.9555 Epoch 5/5 250/250 [==============================] - 208s 830ms/step - loss: 0.0136 - accuracy: 0.9965 - val_loss: 0.1401 - val_accuracy: 0.9545
<keras.callbacks.History at 0x7f7c4c8cbac0>
model.evaluate(test)
63/63 [==============================] - 19s 301ms/step - loss: 0.1401 - accuracy: 0.9545
[0.1401241570711136, 0.9545000195503235]
loss_final, accuracy_final = model.evaluate(test)
63/63 [==============================] - 19s 301ms/step - loss: 0.1401 - accuracy: 0.9545
print("Final loss: {:.2f}".format(loss_final))
print("Final accuracy: {:.2f}".format(accuracy_final))
Final loss: 0.14 Final accuracy: 0.95
# Prediction and visualizations
classes = os.listdir('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/val')
plt.figure(figsize=(18,28))
for i in enumerate(classes):
pic = os.listdir('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/val/'+i[1])
pic = pic[np.random.randint(len(pic)-1)]
image = Image.open('/content/gdrive/MyDrive/Colab Notebooks/dataset8020/val/'+i[1]+'/'+pic)
image = np.asarray(image)
pred = np.argmax(model.predict(image.reshape(-1,256,256,3)/255))
for j in list(enumerate(list(test.class_indices.keys()))):
if pred == j[0]:
prediction = j[1]
plt.subplot(5,2,i[0]+1)
plt.title('Actual: {0} / Predicted: {1}'.format(i[1], prediction))
plt.imshow(image)
plt.show()
1/1 [==============================] - 3s 3s/step 1/1 [==============================] - 0s 36ms/step 1/1 [==============================] - 0s 36ms/step 1/1 [==============================] - 0s 33ms/step 1/1 [==============================] - 0s 33ms/step 1/1 [==============================] - 0s 36ms/step 1/1 [==============================] - 0s 34ms/step 1/1 [==============================] - 0s 32ms/step 1/1 [==============================] - 0s 33ms/step 1/1 [==============================] - 0s 32ms/step
y_pred = model.predict(test)
y_pred = np.argmax(y_pred, axis=1)
63/63 [==============================] - 20s 294ms/step
# Saving the model as a h5 file
from tensorflow.keras.models import load_model
model.save('model_resnet152V2_tf.h5')
model = load_model('model_resnet152V2_tf.h5')
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
path = '/content/gdrive/MyDrive/Colab Notebooks/uploads/' + fn
img = image.load_img(path, target_size=(256, 256, 3))
x = image.img_to_array(img)
plt.imshow(x/255.)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=32)
index = tf.argmax(classes[0], axis=0)
print(classes[0])
if classes[0][0]==1:
print("Bacterial spot")
elif classes[0][1]==1:
print("Early blight")
elif classes[0][2]==1:
print("Late blight")
elif classes[0][3]==1:
print("Leaf Mold")
elif classes[0][4]==1:
print("Septoria Leaf Spot")
elif classes[0][5]==1:
print("Spider Mites")
elif classes[0][6]==1:
print("Target Spot")
elif classes[0][7]==1:
print("Tomato Yellow Leaf Curl Virus")
elif classes[0][8]==1:
print("Tomato Mosaic Virus")
else:
print("Healthy")
Saving Tomato Yellow Leaf Curl Virus.JPG to Tomato Yellow Leaf Curl Virus.JPG 1/1 [==============================] - 1s 657ms/step [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] Healthy
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
# path = lokasi filenya, fn itu lokasi file local di google colab
path = '/content/gdrive/MyDrive/Colab Notebooks/uploads/' + fn
img = image.load_img(path, target_size=(256, 256, 3))
x = image.img_to_array(img)
#xx=np.asarray(img)
#print ("X:",x)
#print ("XX:",xx)
plt.imshow(x/255.)
x = np.expand_dims(x, axis=0)
images = np.asarray(img)
#print ("images: ", images)
pred = np.argmax(model.predict(images.reshape(-1,256,256,3)/255))
print ("pred:",pred)
if pred==0:
print("Spider Mites")
elif pred==1:
print("Septoria Leaf Spot")
elif pred==2:
print("Late blight")
elif pred==3:
print("Mosaic Virus")
elif pred==4:
print("Leaf Mold")
elif pred==5:
print("Healthy")
elif pred==6:
print("Bacterial Spot")
elif pred==7:
print("Early Blight")
elif pred==8:
print("Target Spot")
else:
print("Yellow Leaf Curl Virus")
Saving bacterial spot 1.JPG to bacterial spot 1.JPG 1/1 [==============================] - 0s 35ms/step pred: 0 Spider Mites
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
# path = lokasi filenya, fn itu lokasi file local di google colab
path = '/content/gdrive/MyDrive/Colab Notebooks/uploads/' + fn
img = image.load_img(path, target_size=(256, 256, 3))
x = image.img_to_array(img)
#xx=np.asarray(img)
#print ("X:",x)
#print ("XX:",xx)
plt.imshow(x/255.)
x = np.expand_dims(x, axis=0)
images = np.asarray(img)
#print ("images: ", images)
pred = np.argmax(model.predict(images.reshape(-1,256,256,3)/255))
print ("pred:",pred)
if pred==0:
print("Bacterial Spot")
elif pred==1:
print("Early Blight")
elif pred==2:
print("Healthy")
elif pred==3:
print("Late Blight")
elif pred==4:
print("Leaf Mold")
elif pred==5:
print("Mosaic Virus")
elif pred==6:
print("Septoria Leaf Spot")
elif pred==7:
print("Spider Mites")
elif pred==8:
print("Target Spot")
else:
print("Yellow Leaf Curl Virus")
Saving bacterial spot 1.JPG to bacterial spot 1.JPG 1/1 [==============================] - 2s 2s/step pred: 0 Bacterial Spot